C# 如何在轮盘模拟中包含 0?
C# how to include 0 in Roulette Simulation?
所以我想模拟一个轮盘赌来证明房子总是赢。
我快完成了,但我偶然发现了一个问题。我可以输入滚动的次数,而且效果很好。我得到不同的数字,它还告诉我是红色还是黑色。
但是数字 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();
}
}
好的,问题是 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
The Next(Int32, Int32) overload returns random integers that range
from minValue to maxValue – 1
所以我想模拟一个轮盘赌来证明房子总是赢。
我快完成了,但我偶然发现了一个问题。我可以输入滚动的次数,而且效果很好。我得到不同的数字,它还告诉我是红色还是黑色。
但是数字 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();
}
}
好的,问题是 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
The Next(Int32, Int32) overload returns random integers that range from minValue to maxValue – 1