小编mag*_*iez的帖子

Java:唯一的10位数ID

我需要在Java中生成一个唯一的10位数ID.以下是此ID的限制:

  • 只有数字
  • 最多10位数
  • 每秒最多可以创建10个不同的ID
  • 必须是唯一的(即使应用程序重新启动)
  • 无法在数据库中保存数字
  • 尽可能快地不向系统添加太多的延迟

我到目前为止找到的最佳解决方案如下:

private static int inc = 0;

private static long getId(){

    long id = Long.parseLong(String.valueOf(System.currentTimeMillis())
            .substring(1,10)
            .concat(String.valueOf(inc)));
    inc = (inc+1)%10;
    return id;
}
Run Code Online (Sandbox Code Playgroud)

该解决方案存在以下问题:

  • 如果由于任何原因需要每秒创建10个以上的ID,则此解决方案将不起作用.
  • 在大约32年内,这个ID可以重复(这可能是可以接受的)

是否有其他解决方案来创建此ID?

我没想到的任何其他问题?

谢谢你的帮助,

java unique

13
推荐指数
1
解决办法
1万
查看次数

使用自定义清单创建jar,其中包含classpath中的多个库

我正在尝试从我的eclipse创建一个jar,为了能够使用外部.jars,我在类路径中使用这个带有多个.jars的清单:

Manifest-Version: 1.0
Sealed: true
Main-Class: src.BatchTester
Class-Path: . P:/Tools/xstream/1.4.2/lib/kxml2-2.3.0.jar P:/Tools/xstream/1.4.2/lib/xstream-1.4.2.jar P:/Tools/StringTemplate/4.0.5/lib/antlr-3.3-complete.jar P:/Tools/StringTemplate/4.0.5/lib/ST-4.0.5.jar P:/Tools/Jdbc/lib/sqljdbc4.jar
Run Code Online (Sandbox Code Playgroud)

显然,如果我没有将库放在类路径中,则会出现以下错误:

java.lang.NoClassDefFoundError: com/thoughtworks/xstream/XStream
Run Code Online (Sandbox Code Playgroud)

但是当我把它们放在类路径中时,错误会变为:

java.lang.NoClassDefFoundError: src/BatchTester
Run Code Online (Sandbox Code Playgroud)

因此,它无法找到我的主要课程.我在类路径中.尝试了几种可能性,比如添加或删除类路径,但无法使其工作.

知道怎么解决这个???

感谢您的时间和精力,


PS:创建.jar之后,清单里面的类路径看起来像:

Class-Path: . P:/Tools/xstream/1.4.2/lib/kxml2-2.3.0.jar P:/Tools/xstr
 eam/1.4.2/lib/xstream-1.4.2.jar P:/Tools/StringTemplate/4.0.5/lib/ant
 lr-3.3-complete.jar P:/Tools/StringTemplate/4.0.5/lib/ST-4.0.5.jar P:
 /Tools/Jdbc/lib/sqljdbc4.jar 
Run Code Online (Sandbox Code Playgroud)

使用新的线条和空格,但即使将其更改为"正确"格式,我也遇到了同样的问题.

PS2:我知道有一些像Fat-Jar这样的插件你可以使它工作,但我不想在我的.jar中插入超过需要的数据

java eclipse jar manifest

4
推荐指数
1
解决办法
3万
查看次数

Java舍入错误

我发现我的Java应用程序出现舍入错误.用于舍入的方法是:

 public static double round(double value,double precision)
    {
        return Math.round(value * precision) / precision;
    }
Run Code Online (Sandbox Code Playgroud)

这可能有一个错误(即圆形(138.515,100)应返回138.52,并返回138.51)所以我创建了以下圆形:

//  Mikeldi's rounder
public static double round2DecimalPlaces(double value,int decimalPlaces)
{
    int s = value<0?-1:1;
    double p = 1;
    for (int i = 0; i < decimalPlaces; i++) {
        p*=10;
    }

    double n = (long) value;
    double d = ((value*10*p)-(n*10*p));
    d +=s*5;
    d /= 10;
    d = (long)d;
    d /= p;
    return d+n;
}
Run Code Online (Sandbox Code Playgroud)

我创建了这种方法,因为其他舍入方法给系统增加了太多的延迟(低延迟系统).这个比前一个快了大约10倍.

注意:此轮组仅用于舍入到正确的decimalPlaces(或0).

这个新的圆领我有没有看到任何问题?

谢谢,

java double rounding

2
推荐指数
1
解决办法
3023
查看次数

标签 统计

java ×3

double ×1

eclipse ×1

jar ×1

manifest ×1

rounding ×1

unique ×1