2010-01-16 34 views
2

我只是想知道如何使用J2ME CLDC 1.0 MIDP 2.0生成随机数?J2ME:如何生成随机数?

基本上我想在每次从手机屏幕点击菜单项 Generate时生成一个14位数的随机数。

+0

我使用CLDC 1.0 MIDP 2.0 – Sarfraz 2010-01-16 16:22:29

回答

2

我不是很熟悉J2ME,但是Javadoc表明Random类是CLDC API的一部分,因此您可以产生这样一个14位数:

public static void main(String[] args) { 
    Random r = new Random(); 
    long l = r.nextLong(); 
    System.out.println(String.format("%015d", l).substring(1, 15)); 
} 
+0

我认为这样会更少随机...两个随机长可以有相同的前14个字符,而不是等于。 – 2010-01-16 11:42:43

+0

比什么随机性更少? – 2010-01-16 11:49:28

+2

如果你做了相反的事情,它只会是“较少随机”,即尝试从一个超过10^14个可能值的来源生成一个14位数的数字。上面的代码有一个不同的问题:当随机长度小于14位时,会导致StringIndexOutOfBoundsException。 – 2010-01-16 11:51:38

1

可以使用Random类MIDP的,或者一个在CLDC 1.1

你可以做nextLong,然后截断,或者使用next(44)并从那里迭代有一个真正的14号长。

+0

14位将溢出int变量。 – jarnbjo 2010-01-16 11:42:34

+0

omg,什么是newb错误:/ 改变它很长 – 2010-01-16 11:50:17

+0

我不相信你打算使用无参数nextInt()方法... – 2010-01-16 11:54:59

0
import java.util.Random; 

private static void showRandomInteger(int aStart, int aEnd){ 
     Random generator = new Random(); 
     generator.setSeed(System.currentTimeMillis()); 
     if (aStart > aEnd) { 
      throw new IllegalArgumentException("Start cannot exceed End."); 
     } 
     //get the range, casting to long to avoid overflow problems 
     long range = (long)aEnd - (long)aStart + 1; 
     // compute a fraction of the range, 0 <= frac < range 
     long fraction = (long)(range * generator.nextDouble()); 
     int randomNumber = (int)(fraction + aStart); 
     System.out.println("Generated : " + randomNumber); 
     } 

你可以使用这种通用方法计算任意范围内的随机数。

+0

'nextDouble()'是不是在随机 – 2010-01-16 12:47:08

+0

的J2ME版本访问是它不存在在CLDC 1.0,但你可以在CLDC 1.1 – Vivart 2010-01-16 13:35:25

+1

找到,但我使用CLDC 1.0,该怎么办? – Sarfraz 2010-01-16 16:23:26

2
Random r = new Random(); 
r.nextInt(bottomX-topX)+topX; //will give you the next random integer in range [bottomX,topX]