2017-10-23 19 views
-1

the Dining Philosophers Problemで作業中です。用フォークを配布iが見つかったこのループIMを使用:I"%"を使用すると、予期しない結果が発生する

int philosophersNumber=5; 

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

  • を:哲学者の数
  • フォーク[I]:右手用frok。
  • フォーク[(i + 1)%哲学者番号]:左手のフローク。私はループの中で、いくつかのプリントを追加する場合

は、出力は次のようになります。

----- 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が5になるまで常にi + 1と同じで、結果は0ですか?私は変数の種類に関連していると思いますが、私は本当に分かりません。

+6

モジュロは何ですか? – tkausl

答えて

3

単純なことですが、%はモジュロで、これは整数除算の残りの部分を意味します。 a%bの場合は< b - > a%b = aです。これはすべてが残りだからです。例:

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

プログラム的なものではなく、その数学。

関連する問題