【问题标题】:Operation with "%" give an unexpected result [duplicate]使用“%”进行操作会产生意想不到的结果[重复]
【发布时间】:2023-03-02 22:14:01
【问题描述】:

我在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]
        );
    }

  • i:哲学家的编号
  • forks[i]:右手叉。
  • forks[(i + 1) %phthalsNumber]:左手的叉子。

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

----- 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? 我假设与变量的类型有关,但我真的不知道。

【问题讨论】:

  • 你知道模数是做什么的吗?

标签: java operation dining-philosopher


【解决方案1】:

简单的事情,% 是模数,这意味着整数除法的其余部分。如果对于 a%b,a a%b = a 因为剩下的就是一切。例如:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多