我正在尝试划分由13生成的随机数。它的范围可以是1,53。我需要将随机数13除以得到一个整数(以确定它在甲板上的适合范围)牌)。我需要西装超出1-4。
随机数:
value = MyRandom.Next(1, 53);
司:
suit = value / 13;
face = value % 13;
顺便说一下,这套衣服会产生0。
答案 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;
希望这会有所帮助。祝你好运!