在C#分区中保持0为输出

时间:2014-02-06 03:13:58

标签: c# random integer-division

我正在尝试划分由13生成的随机数。它的范围可以是1,53。我需要将随机数13除以得到一个整数(以确定它在甲板上的适合范围)牌)。我需要西装超出1-4。

随机数:

value = MyRandom.Next(1, 53);

司:

suit = value / 13;
face = value % 13;

顺便说一下,这套衣服会产生0。

3 个答案:

答案 0 :(得分:2)

我会在黑暗中捅一下你真正要问的东西。

我猜你实际上为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

答案 1 :(得分:-1)

要完成您感兴趣的任务,您应该结合使用您的值来加倍并执行Math.Ceiling运算符。

您的Suit代码应写为:

var suit = Math.Ceiling((double)value / 13);

答案 2 :(得分:-1)

如果您发布更多代码,将会很有帮助。随机对于计算机来说并不是一件容易的事情,因为很多架构都没有进行随机计算。因此,.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;

希望这会有所帮助。祝你好运!