2011-05-11 7 views
3

모듈러스 연산 계산 방법을 파악하기 위해 작은 문제가 있습니다. 큐를 구축 중이므로 순환 배열이 있습니다. 이 모듈러스 연산이 어떻게 작동하는지 알 수 없습니다. 원형 배열의 모듈러스 연산을 이해하는 데 도움이됩니다.

주어 Q

5 요소 길이의 문자의 배열, 최대 상수 배열의 최대 길이를 제공은 "5"희소 는 어레이 Q 가능한 첫 번째 지점을 나타내는 int이며

public void enqueue(Character c)throws FullQueueException{ 

    if(size()== MAX -1){ //if only 1 place left, is full, throw exc 

     throw new FullQueueException("Queue is full"); 
    } 
    q[rare]=c; 
    rare=(rare+1)%MAX; 
} 

드문 "첫 번째 빈 자리"가 3 인 경우, 메서드가 끝난 후 희귀 한 값은 무엇일까요? 이것은 내가 얻지 못하는 것입니다. rare = (rare + 1) % MAX는 희귀 = 희귀 = 0,8을 제공하는 희귀 = 4 % 5를 의미합니다. 방법 크기 동일

:

public int size() { 

    return (MAX - front + rear) % MAX; 
} 

주어 앞에 배열의 3 개 요소가 있으므로, 1 드문 4 어레이 가정하자 앞의 첫 번째 요소를 나타낸다하는 int 변수이므로 크기는 (5-1 + 4) % 5이며, 실제 크기는 3인데 반해, 1.6은 8 % 5입니다. 제안이 있습니까? 이것은 자바보다 수학일지도 모르지만 아마도 여러분 중 일부는 이전에 똑같은 의심을 품어 왔을 것입니다. 감사합니다.

답변

4

당신은 모듈러스 연산이하는 일에 관해 당신이 조금 conofused하다고 생각합니다. 그것은 나눗셈 이후에 정수를 남긴다. 그래서 당신의 모범에서.

4 %, 5 = 4 ((3)의 나머지 1 8/5 때문에) 5 = 3

AND

8 % (4/5 (4)의 나머지는 0으로되어 있기 때문)

나머지 구현을 보지 않고 모듈로가 사용되는 이유를 더 설명하기는 어렵지만 기본적으로 순환 배열이 랩 어라운드되도록 보장하는 것처럼 보입니다. 즉 배열의 끝에 도달하면 (예 : 인덱스 7, MAX 크기 8 인 배열의 경우 첫 번째 요소 인 다음 값은 8 % 8 또는 0).

+3

4 % 5 = 4 아니요. – erickson

+0

예. 미안합니다. 내 잘못 입력. 지금 고쳐야한다. – tschaible

0

정수 계산의 결과는 정수입니다. 모듈러스는 나눗셈과 관련이 있지만 나눗셈은 아닙니다.

a % b is the same as (a - a/b * b) 

루프와 동일합니다.

int result = a; 
while(a >= b) a -= b; 
while(a + b <= 0) a += b; 

그러나 rare = (rare + 1) % MAX 위해, 그것은 동일하다 (b 가정하면 양수).

rare = (rare == MAX - 1 ? 0 : rare + 1); 
관련 문제