使用"%"进行操作给出意想不到的结果

时间:2017-10-23 22:31:37

标签: java operation dining-philosopher

我在the Dining Philosophers Problem工作。使用我发现的循环分发叉子:

int philosophersNumber=5;

    for (int i = 0; i < philosophersNumber; i++) {
        philosophers[i] = new Philosopher(
                i, 
                forks[i], 
                forks[(i + 1) % philosophersNumber]
        );
    }
  • :哲学家的号码
  • forks [i] :右手的frok。
  • forks [(i + 1)%philosophersNumber] :左手的frok。

如果我在循环中添加一些打印件,输出如下所示:

----- PHILOSOHPER 0  ------
Right fork: 0
Left fork: 1
----- PHILOSOHPER 1  ------
Right fork: 1
Left fork: 2
----- PHILOSOHPER 2  ------
Right fork: 2
Left fork: 3
----- PHILOSOHPER 3  ------
Right fork: 3
Left fork: 4
----- PHILOSOHPER 4  ------
Right fork: 4
Left fork: 0

嗯,我的疑问很简单:为什么(i + 1)%5的结果始终与i + 1相同,直到i + 1为5,结果为0? I假设与变量的类型有关,但我真的不知道。

1 个答案:

答案 0 :(得分:3)

简单的事情,%是模数,这意味着整数除法的其余部分。如果是%b,a&lt; b - &gt; a%b = a因为一切都是其余的。 e.g:

1%3 = 1;
2%3 = 2;
3%3 = 0;
4%3 = 1;
5%3 = 2 etc.

不是程序化的东西,它的数学。