C# как включить 0 в симуляцию рулетки?

Поэтому я хочу смоделировать рулетку, чтобы доказать, что Дом всегда побеждает.

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

Однако число 0 не будет отображаться в результатах. Я не знаю, как это исправить, код выглядит хорошо для меня.

Код:

namespace ConsoleApplication9
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] Null = new int[1] { 0 };
            int[] Rote = new int[18] { 1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36 };
            int[] Schwarze = new int[18] { 2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 29, 31, 33, 35 };

        // 0 ohne Tischlimit

        var list = new List<int>();
        list.AddRange(Rote);
        list.AddRange(Schwarze);
        list.AddRange(Null);

        Console.WriteLine("Wie oft soll gespielt werden?");
        int Anzahl = Convert.ToInt32(Console.ReadLine());
        Random zufall = new Random();

        for (int i = 0; i < Anzahl; ++i)
        {
            int number = list[zufall.Next(0, list.Count - 1)];

            if (Rote.Contains(number))
            {
                Console.WriteLine("Rot" + number);
            }

            if (Schwarze.Contains(number))
            {
                Console.WriteLine("Schwarz" + number);
            }

            if (Null.Contains(number))
            {
                Console.WriteLine("Null" + number);
            }
        }
        Console.ReadLine();
    }
}

1 ответ

Решение

Хорошо, дело в том, что Random.Next Method (Int32, Int32) использует верхнюю границу как исключительную. Так что у тебя есть 0 как последний элемент списка. И прохождение list.Count - 1 приводит к созданию значений между 0 а также list.Count - 2, Таким образом, последний элемент списка просто игнорируется, так как вы никогда не создадите последний индекс list.Count - 1, Вам нужно пройти list.Count в Next метод:

int number = list[zufall.Next(0, list.Count)];

https://msdn.microsoft.com/en-us/library/2dx6wyd4(v=vs.110).aspx

Перегрузка Next(Int32, Int32) возвращает случайные целые числа в диапазоне от minValue до maxValue - 1

Другие вопросы по тегам