Ладно
У меня проблема в том, что я хочу сгенерировать 64 числа от 0 до 1 (что означает 0 или 1)
Функция, которая у меня есть в настоящее время:
public static int randNr(int max) {
Random r = new Random();
int o = r.nextInt(max);
return o;
}
Но он всегда возвращает 0. Есть ли способ сделать так, чтобы он также генерировал 1?
РЕДАКТИРОВАТЬ:
Функция находится в другом java-файле, чем когда я ее вызываю!
2 ответа
Две проблемы:
1) nextInt(max);
генерирует число от 0 до, но не включая max
. Я предполагаю, что вы передаете 1 как max
. Пройдите 2 и все будет хорошо.
2) Создание нового объекта генератора каждый раз портит статистические свойства генератора. Вы должны создать один экземпляр Random
и (i) либо передать в функцию, либо (ii) сохранить экземпляр как переменную-член.
Эта функция работает нормально. Вероятно, вы вызываете его с неправильными аргументами . Так должно быть:
randNr(2)
Почему? Потому что он использует метод Random#nextInt(max)
, который возвращает случайное целое число в диапазоне [0, max-1]
(включая 0
и max-1
).
Примечание. Не рекомендуется создавать новый объект Random
при каждом вызове функции. Одним из решений было бы объявить объект Random
как член класса static
:
public class Test
{
private static Random r = new Random();
// ...
}
Другое решение - использовать метод static
Math.random()
1 :
int o = (int) Math.round(Math.random());
1: Может ли кто-нибудь подтвердить, что этот метод быстрее, чем OP?
Random
связано не только с эффективностью, но, что более важно, с тем фактом, что распределение случайных чисел не будет иметь правильных статистических свойств.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.