Операция с "%" дает неожиданный результат

Я работаю в Обеденной философской проблеме. Для распределения я использую этот цикл, который я нашел:

int philosophersNumber=5;

    for (int i = 0; i < philosophersNumber; i++) {
        philosophers[i] = new Philosopher(
                i, 
                forks[i], 
                forks[(i + 1) % philosophersNumber]
        );
    }

  • я: номер философа
  • вилки [i]: лягушка для правой руки.
  • вилки [(i + 1)% philoshersNumber ]: лягушка для левой руки.

Если я добавлю несколько отпечатков в цикл, результат будет выглядеть следующим образом:

----- 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? Я полагаю, это связано с типом переменных, но я действительно не знаю.

1 ответ

Решение

Простая вещь, % по модулю, что означает остаток целочисленного деления. если для%b, a a%b = a, потому что все остальное. например:

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

не программная вещь, это математика.

Другие вопросы по тегам