Ладно

У меня проблема в том, что я хочу сгенерировать 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-файле, чем когда я ее вызываю!

-1
Ch3t0r 2 Июн 2014 в 11:06

2 ответа

Лучший ответ

Две проблемы:

1) nextInt(max); генерирует число от 0 до, но не включая max. Я предполагаю, что вы передаете 1 как max. Пройдите 2 и все будет хорошо.

2) Создание нового объекта генератора каждый раз портит статистические свойства генератора. Вы должны создать один экземпляр Random и (i) либо передать в функцию, либо (ii) сохранить экземпляр как переменную-член.

2
Bathsheba 2 Июн 2014 в 07:10

Эта функция работает нормально. Вероятно, вы вызываете его с неправильными аргументами . Так должно быть:

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?

1
Christian 2 Июн 2014 в 07:25