2017-10-23 22 views
-1

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을 : 철학자 수
  • 포크 [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

단순한 것, %는 모듈로, 이는 나머지 정수 나누기를 의미합니다. % b 인 경우 < b -> a % b = a이면 나머지는 모두이기 때문입니다. 예 :

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

프로그래밍 방식의 것은 아닙니다.