[英]Keep getting 0 as an output in C# division
我正在尝试对由13生成的随机数进行除法。取值范围可以是1、53。我需要对13进行随机除法以获得整数(以确定一副纸牌中的数字是否适合)。 我需要西装不超过1-4。
随机数:
value = MyRandom.Next(1, 53);
师:
suit = value / 13;
face = value % 13;
顺便说一句,西服一直产生0。
我要在黑暗中刺探您的真正要求。
我猜您实际上是suit
的非零值,但是您偶尔也会得到零。 在这种情况下,这里的主要问题最终归结为基于0的索引和基于1的索引。
您需要做的是使用基于0的索引进行所有生成/计算,然后将1加到基于1的索引。 (或者,您可以使用基于0的索引)
示例代码:
value = MyRandom.Next(0, 52); // notice the values are inclusively between 0 and 51
suit = (value / 13) + 1; // this will be between 1 and 4
face = (value % 13) + 1; // this will be between 1 and 13
要完成您感兴趣的任务,您应该结合使用将值转换为两倍并执行Math.Ceiling运算符的组合。
您的西装代码应写为:
var suit = Math.Ceiling((double)value / 13);
如果您发布更多代码,将很有帮助。 对于计算机而言,随机操作并非易事,因为太多的体系结构导致不进行随机计算。 因此,.net中的随机生成器是基于种子值的伪随机数序列。 您可以随心所欲地拿出种子,但是我经常看到当前使用的DateTime的滴答声。 这是使用您的问题的示例,我得到了您正在寻找的预期结果:
var rand = new Random((int)(DateTime.Now.Ticks % int.MaxValue));
var value = rand.Next(1, 53);
var suit = value / 13;
var face = value % 13;
希望这可以帮助。 祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.