2015-12-13 4 views
1

Итак, я хочу, чтобы имитировать рулетку, чтобы доказать, что Дом всегда побеждает.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(); 
    } 
} 
+0

' Дом всегда выигрывает - ну, если вы продолжите играть, это будет, но если вам когда-нибудь удастся продвинуться вперед, вы всегда можете встать и уйти :) Во всяком случае, IMO, ваша следующая задача должна состоять в том, чтобы переписать эту программу на giv e - тот же самый тип вывода, но без трех массивов - они не нужны для того, что вы здесь делаете. –

+0

Люди жадные, поэтому его трудно просто сдаться, как только вы выиграете приличную сумму денег ^.^Можете ли вы дать мне небольшой намек? Друг рекомендовал мне сделать это с помощью массивов. – Zwegat

+0

Действительно - так казино остаются в бизнесе :) - Конечно - вы заинтересованы в получении одного из результатов красного, черного или нулевого с той же вероятностью, что и рулетка. Эти вероятности составляют 18, 18 и один соответственно, как и размеры вашего массива. Таким образом, вы можете просто сделать (в стенограмме) 'r = random (37); if (r == 0) «ноль» else if (r <= 18) «Красный» еще «Черный» (37 = 18 + 18 + 1, конечно). –

ответ

3

Хорошо, дело в том, что 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

Следующая (Int32, Int32) перегрузки возвращает случайные целые числа, которые варьируются от MinValue до MaxValue - 1

+0

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

+0

Работает как очарование. Спасибо! – Zwegat