. net Я всегда получаю отрицательный ответ, когда использую случайный - PullRequest
0 голосов
/ 07 января 2020

В этом коде я всегда получаю отрицательный ответ. Почему? Я надеялся всегда получать разные ответы, потому что это случайно. Я буду благодарен за любую помощь!

Random random = new Random();
int a = 10;
int cycle = 1000;
while (cycle != 0)
{
    a += random.Next(-1, 1);
    cycle--;
}

Ответы [ 2 ]

8 голосов
/ 07 января 2020

С Next(-1, 1) вы получите -1 или 0. Никогда 1, потому что:

Нижняя граница Random.Next равна включительно .

Верхняя граница Random.Next равна эксклюзив .

Чтобы достичь цели, измените диапазон с [-1, 1) на [-1, 2)

random.Next(-1, 2)
5 голосов
/ 07 января 2020

Давайте посмотрим на документацию для Random.Next(int, int):

Параметры

minValue

Включающая нижняя граница возвращенного случайного числа.

maxValue

Исключительная верхняя граница возвращенного случайного числа. maxValue должно быть больше или равно minValue.

Возвращает

32-разрядное целое число со знаком больше или равно minValue и меньше maxValue; то есть диапазон возвращаемых значений включает minValue, но не maxValue. Если minValue равно maxValue, возвращается minValue.

Итак, вы запрашиваете число, которое

  1. Больше или равно -1
  2. Менее 1

Возможные числа, которые вы получите в -1 и 0. Обратите внимание, что если вы добавите вместе множество -1 и 0, вы никогда не достигнете 0 1 ...

Если вы хотите получить числа -1, 0 и 1 необходимо использовать:

random.Next(-1, 2);

1 Запрет целочисленного переполнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...