2010-01-16 5 views
2

Я просто хотел узнать, как создать случайное число, используя J2ME CLDC 1.0 MIDP 2.0?J2ME: Как создать случайное число?

В принципе, я хочу генерировать случайное число из 14 цифр каждый раз, когда элемент меню Сгенерирован с экрана мобильного телефона.

+0

Я использую cldc 1.0 midp 2.0 – Sarfraz

ответ

2

Я не очень знаком с J2ME, однако Javadoc показывает, что случайный класс является частью API CLDC, так что вы можете создать 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 символов и не быть равными. –

+0

менее случайный чем? –

+2

Было бы «менее случайным», если бы вы сделали обратное, т. Е. Попытались сгенерировать 14-значное число из источника, имеющего менее 10^14 возможных значений. В приведенном выше коде есть другая проблема: это приведет к исключению StringIndexOutOfBoundsException, когда случайный длинный имеет менее 14 цифр. –

1

Вы можете использовать Random класс MIDP, или один в CLDC 1.1

Вы могли бы сделать nextLong, а затем обрезать или использовать next(44) и перебирать оттуда иметь реальный 14-номер длиной.

+0

14 цифр будут переполнять переменную int. – jarnbjo

+0

omg, какая ошибка newb:/ изменил его на длинный –

+0

И я не верю, что вы намерены использовать бездонный метод nextInt() ... –

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()' недоступен в случайной версии J2ME –

+0

Да, его нет в cldc 1.0, но вы можете найти в cldc 1.1 – Vivart

+1

, но я использую cldc 1.0, для чего? – Sarfraz

2
Random r = new Random(); 
r.nextInt(bottomX-topX)+topX; //will give you the next random integer in range [bottomX,topX] 
Смежные вопросы