BigInteger q = новый BigInteger (8, 10, новый Random ());не дает ожидаемого результата в Android - PullRequest
3 голосов
/ 09 декабря 2011

BigInteger q = new BigInteger(8, 10, new Random()); дает мне случайные числа, как и ожидалось, каждый раз при запуске с моего рабочего стола, но не в Android.

в Android Я всегда получаю только один и тот же вывод вместо случайного числа.Помогите мне получить случайный BigIntegr.

для вашей информации:

int randQ = (int) (Math.random() * 9);      
        for (int r = 0; r < randQ; r++) {

            q = q.nextProbablePrime();
        }

- это быстрое исправление, которое я сделал, и я не доволен этим исправлением, поскольку оно отнимает дополнительное время.Ваши предложения высоко ценятся

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

Это очень распространенная проблема, не зависящая от языка или платформы.

Вы должны повторно использовать экземпляр Random(), чтобы каждый раз получать случайные числа. Конструктор по умолчанию запустит генератор псевдослучайных чисел с текущим временем. Текущее время не очень быстро меняется в зависимости от вашей программы, поэтому вы продолжаете получать одно и то же число, пока не начнут работать часы.

Если вы не возродите заново, каждый раз, когда вы запрашиваете другое значение, вы будете получать разные номера. Вы можете избежать повторного заполнения, повторно используя экземпляр и вызвав:

Random random = new Random(); // reuse this instance...
int value = random.nextInt(); // use these values instead of new Random()

См .: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Random.html

1 голос
/ 09 декабря 2011

EDITED
Вместо этого используйте:

// creates random object with current instant as seed
Random generator = new Random((new Date()).getTime()); 
BigInteger q = new BigInteger(8, 10, generator);
...