繁体   English   中英

在C#除法中保持输出为0

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM