JavaMe:14个正数的随机数生成

时间:2010-01-21 11:41:21

标签: java java-me java-ee

我想生成一个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。

对代码的任何建议或改进都将受到高度赞赏。

4 个答案:

答案 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)。
否则,您可以通过

在1000000000000000和9999999999999999之间创建一个14位数字
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)表示数字。