百分号(%)是什么意思?

4

我遇到了一些包含数组参数中的%符号的代码。

它是什么意思,如何工作?

例子:

String[] name = { "a", "b", "c", "d" };

System.out.println(name[4 % name.length]);
System.out.println(name[7 % name.length]);
System.out.println(name[50 % name.length]);

输出:

a
d
c

这是取模运算符。它计算整数除法的余数。 - meowgoesthedog
5
“Remainder”指的是“余数”,而不是“模数”。如果使用“模数”,它会以不同的方式处理负数。 - T.J. Crowder
2个回答

12
那是余数运算符,它给出整数除法的余数。例如,3 % 21,因为3 / 2的余数是1
它被用于保持值在范围内:如果name.length小于4、7或50,则在这些值上执行% name.length的结果是一个处于0name.length - 1范围内的值。
因此,即使数字(4、7或50)超出范围,该代码也可靠地从数组中选择条目。 4 % 407 % 4350 % 42。所有这些都是name的有效数组索引。
完整示例(live copy):
class Example
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String[] name = { "a" , "b" , "c" , "d"};
        int n;
        n = 4 % name.length;
        System.out.println(" 4 % 4 is " + n + ": " + name[n]);
        n = 7 % name.length;
        System.out.println(" 7 % 4 is " + n + ": " + name[n]);
        n = 50 % name.length;
        System.out.println("50 % 4 is " + n + ": " + name[n]);
    }
}

输出:

4 % 4 是 0:a
7 % 4 是 3:d
50 % 4 是 2:c

那么,这意味着它不会抛出任何错误,但结果不会如预期一样,对吗? - The Alpha
3
@TheAlpha: 取决于期望的结果是什么。 :-) 使用 % 来保持数值在范围内非常普遍,如果你希望将其保持在范围内,则会得到预期的结果。你通常会在需要循环索引的情况下看到它:index = (index + 1) % size - T.J. Crowder
@Mr.Blue:很高兴能帮上忙。顺便说一下,在引用中括号()中的4750并没有起到任何作用。通常情况下,对于单个值,分组运算符(())是没有意义的。 - T.J. Crowder

1
简单来说,这是取模运算符,或者更准确地说是余数运算符。
这与数组本身无关,只是对用于计算数组索引的值进行数字计算。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接