我想生成一个14位正数的随机数,我使用下面的函数:
public void random()
{
Random number = new Random();
long l = number.nextLong();
number.setSeed(System.currentTimeMillis());
long num = Math.abs(number.nextInt())%999 + (l/100000); // problematic line
mTextBox.setString("" + num);
}
我对JavaMe很新,我自己做了以上功能,但我相信它没有按预期工作。它还会生成-ve数字。此外,有时生成的数字中缺少一个或两个数字,导致12或13个数字不是14。
对代码的任何建议或改进都将受到高度赞赏。
答案 0 :(得分:2)
如果你想要14个数字,那么你应该使用14个number.nextInt(10)
来电 - 这样的话:
public static String randomDigits(Random random, int length)
{
char[] digits = new char[length];
// Make sure the leading digit isn't 0.
digits[0] = (char)('1' + random.nextInt(9);
for (int i = 1; i < length; i++)
{
digits[i] = (char)('0' + random.nextInt(10));
}
return new String(digits);
}
请注意,我已将Random
的实例设为传入,而非由方法创建 - 这样可以更轻松地使用一个实例并避免重复播种。它也更通用,因为它将“使用UI中的字符串”方面与“生成随机字符串”分开。
我不知道J2ME是否支持Random.nextInt(int)
- 如果不是,请告诉我。在随机分布方面使用Math.abs(number.nextInt())%999
是个坏主意。
答案 1 :(得分:2)
我不明白你真正想要的是什么,代码建议你想要一个3位数字(%999
)。
否则,您可以通过
long num = 1000000000000000L + (long)(number.nextDouble() * 8999999999999999.0);
note (1 / 100000)
为0(零),因为它是通过整数除法完成的,使用(1.0 / 100000.0)
进行双重划分
答案 2 :(得分:1)
long num = 10000000000000L+(long)(random.nextDouble()*90000000000000.0);
编辑:
mTextBox.setString(MessageFormat.format("{0,number,00000000000000}",
new Object[] {new Long(num)}));
答案 3 :(得分:1)
您收到负数,因为Random.nextInt()
返回任何 32位整数,其中一半是负数。如果您只想获得正数,则应使用表达式Random.nextInt() & 0x7fffffff
或仅使用Random.nextInt(10)
表示数字。