Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#随机数发生器_C# - Fatal编程技术网

C#随机数发生器

C#随机数发生器,c#,C#,我使用下面的代码来生成4个随机数,但每次我尝试获取文本块中的“system.random”时,它们都会出现。有人帮忙吗?谢谢!!:) 您正在转换随机数生成器,而不是随机数 txtDC1.Text = Convert.ToString(dealCard1); 您的随机数生成器是dc2、pc1和pc2。您的随机数是dealCard2、playerCard1和playerCard2 从这里您应该能够解决问题。首先,您只需要一个随机实例: Random dc1 = new Random(); int

我使用下面的代码来生成4个随机数,但每次我尝试获取文本块中的“system.random”时,它们都会出现。有人帮忙吗?谢谢!!:)


您正在转换随机数生成器,而不是随机数

txtDC1.Text = Convert.ToString(dealCard1);
您的随机数生成器是
dc2
pc1
pc2
。您的随机数是
dealCard2
playerCard1
playerCard2


从这里您应该能够解决问题。

首先,您只需要一个随机实例:

Random dc1 = new Random();
int dealCard1 = dc1.Next(52);
int dealCard2 = dc1.Next(52);
int playerCard1 = dc1.Next(52);
int playerCard2 = dc1.Next(52);
错误是因为您没有报告数字:

txtDC1.Text = Convert.ToString(dealCard1);
txtDC2.Text = Convert.ToString(dealCard2);
txtPC1.Text = Convert.ToString(playerCard1);
txtPC2.Text = Convert.ToString(playerCard2);

为了简单起见,只取一个:

Random dc1 = new Random();
int dealCard1 = dc1.Next(52);
txtDC1.Text = Convert.ToString(dc1);
在这里,您将
dc1
这是一个
Random
对象转换为字符串,而不是
dealCard1
,后者是随机数

txtDC1.Text = Convert.ToString(dealCard1);
等等


(还要注意,如果这里的想法是从52张牌中挑选,就像在扑克牌组中一样,你没有检查你没有超过一张完全相同的牌,这可能是一个问题,也可能不是一个问题)。

你将
Random
对象本身放入文本块,因此是“System.Random”

您的代码应该是:

txtDC1.Text = Convert.ToString(dealCard1);
txtDC2.Text = Convert.ToString(dealCard2);
txtPC1.Text = Convert.ToString(playerCard1);
txtPC2.Text = Convert.ToString(playerCard2);

您也不应该每次都重新创建
随机
实例。只需使用一个(理想情况下作为类级变量)。这可以防止使用(几乎)相同的种子值(基于系统时间)重新播种随机对象。实际上,你的每一个“随机”数字都可能完全相同

首先,您转换了错误的变量,您需要的是

txtDC1.Text = Convert.ToString(dealCard1);
txtDC2.Text = Convert.ToString(dealCard2);
txtPC1.Text = Convert.ToString(playerCard1);
txtPC2.Text = Convert.ToString(playerCard2);
还应避免每次调用click事件时创建random的新实例。考虑创建一个可以重用的随机实例。

如果你必须在每一个事件中创建一个新的实例,那么考虑将种子添加到随机中,因为连续的事件可能导致随机实例被用相同的种子播种,从而导致重复的值。

< P>我以前遇到过这个问题,而我的错误是我有太多的随机实例。因此,通过查看您的代码,我发现您得到了不止一个。我会修改编码,使其只包含一个随机实例。

这是如何作为重复实例关闭的?有人读过这个问题吗?肯定不是重复。是的,这实际上不是他的问题,但这是他会遇到的问题。太好了!谢谢。您正在文本框中使用随机对象dc,
Convert.ToString(dc1)
dc1
更改为
dealCard1
。此外,不应该每次单击按钮都启动新的RNG(或4!)。启动时只实例化一个RNG,并在应用程序的整个生命周期内使用它。@NicholasCarey虽然我同意,但只需点击一个按钮就可以了,因为这样做的次数不足以获得相同的种子。创建它时,实际上不需要重新设定随机种子(它基于系统时间)。创建多个实例实际上会导致一个问题,因为每个新实例都获得相同的种子。我将更新答案以避免增加混淆。谢谢你的提醒。