0

我想知道 C# for Programmers 2010 中有一段代码,这里是:

for (int i = 0; i < deck.Length; i++)
{
    deck[i] = new Card(faces[i % 13], suits[i / 13] );
}

我知道计数是数组内存中的插槽,新卡将花色和面放在甲板上,它们会返回计数值。我不明白的是你怎么能模数除以零?还是我误会了?谢谢

4

3 回答 3

4

这个问题听起来模数运算符让您感到困惑。模数 ( %) 运算符计算除法的余数。它的结构与除法(分子/分母)相同。看来您看到i % 13的是remainder of 13/i。那是错的。它是remainder of i/13。因此,如果i为零,则模运算符将返回 0。您永远不会在应用程序中除以我的零。

一个例子是3/23/2是1个半。但是,如果您将该结果保存为整数(无小数),则仅1保存。那一半去哪儿了?它被扔掉了。如果你想要它,你可以将它保存为floator double,或者使用模数运算符。3%2会给你1,剩下的。这是一个示例程序:

struct ModulusHelper
{
    public int Quotient;
    public int Remainder;
    public ModulusHelper(int numerator, int denominator)
    {
        Quotient = numerator / denominator;
        Remainder = numerator % denominator;
    }
}

你可以像这样使用它:

class Program
{
    static void Main(string[] args)
    {
        ModulusHelper mod = new ModulusHelper(args[0], args[1]);
        Console.WriteLine("Quotient:  {0}", mod.Quotient);
        Console.WriteLine("Remainder: {0}", mod.Remainder);
        Console.ReadKey(); // BATCH `pause`
    }
}
于 2012-07-12T00:16:40.417 回答
1

0 % 13 = 0

0 / 13 = 0

这是简单的数学。

于 2012-07-12T00:09:41.247 回答
0

您不是除以 0,而是将 0 除以 13。0/13 = 0

于 2012-07-12T00:11:37.967 回答