2017-11-09 2 views
-1

나는 특별한 방법, 배열 경계 예외의 색인 아웃을 받고있는 이유 확실하지 않다 :오류가

public int dequeue() 
{ 
    if(isEmpty() == true) 
    { 
     return -1; 
    } 
    else 
    { 
     count--; 
     front = (front + 1) % q.length; 
     return q[front - 1]; 
    } 
} 

나는 몇 가지 시도를했지만 여전히 해결책을 찾지 못했습니다. 모든 도움을 주시면 감사하겠습니다. 미리 답변 해 주신 모든 분들께 감사드립니다.

EDIT (솔루션) : 당신은

front = (front + 1) % q.length; 
    return q[front - 1]; 

:

당신의 방법에 따라
public int dequeue() 
    { 
     if(isEmpty() == true) 
     { 
      return -1; 
     } 
     else 
     { 
      count--; 
      front = (front + 1) % q.length; 
      return q[(front - 1 + q.length) % q.length]; 
     } 
    } 

답변

0

당신이 당신의 deque 방법의이 부분에 보면, 내가, 당신이 순환 큐를 구현하는 가정 대기열의 전면을 이동 한 다음 새 정면 앞에있는 항목을 반환합니다. 대기열이 원형이므로 frontq.length - 1과 같을 때 과 같을 수 있습니다. index = -1을 사용하여 배열에 액세스하려는 xception. 이 return q[(front - 1 + q.length) % q.length]; 같은 대기열 요소를 반환하면서 모듈 작업을 적용하는 것입니다 해결하기 위해

한 가지 방법은 다른 방법으로는 다음과 같이 전면을 이동하기 전에 요소를 저장할 수 :

int element = q[front]; 
    front = (front + 1) % q.length; 
    return element;