如何计算有符号随机整数的绝对值

Sam*_*and 9 java findbugs

我正在尝试生成存储的随机数,我需要返回字符串值.

这是我的方法:

public String generateRand() {
    java.util.Random rand = new java.util.Random(System.currentTimeMillis());
    String rnd = "" + Math.abs(rand.nextInt()) + "" +
       Math.abs(System.currentTimeMillis());
    return rnd;
}
Run Code Online (Sandbox Code Playgroud)

Jenkins的Findbugs插件警告我有Bad attempt to compute absolute value of signed random integer.

此代码生成随机有符号整数,然后计算该随机整数的绝对值.如果随机数生成器返回的数字是Integer.MIN_VALUE,那么结果也将是负数,因为Math.abs(Integer.MIN_VALUE) == Integer.MIN_VALUE.同样的问题也出现在长值上.

计算有符号随机整数绝对值的最佳方法是什么?

小智 11

用 而不是 rand.nextInt(Integer.MAX_VALUE); Math.abs(rand.nextInt())


whi*_*der 8

考虑一下byte.它的值范围从-128到127.假设您byte的值为-100,那么Math.abs(-100)将给出100.但是如果您的字节值是-128怎么办?你不能将128表示为a byte,因为它可以表示的最大值是127.所以Math.abs()简单地返回参数,不变.

故事的寓意是,有可能Math.abs()返回负值.