2017-04-01 2 views
0

안녕하세요 모두 원형 배열을 구현하려고하지만 뭔가 정확하지 않습니다. add 메소드 또는 display에 있는지 확실하지 않습니다. 디버거를 실행할 때 숫자가 있지만 순서대로 가져올 수 없습니다. 제발 내게 의견을 줄 수 있어요. 고맙습니다.순환 대기열 배열

public static void main (String[] args) 
{ 
    Scanner input = new Scanner (System.in); 
    Queue q1 = new Queue(); 
    int choice = 0; 

    do 
    { 
     System.out.println ("Menu:"); 
     System.out.println ("1: Add"); 
     System.out.println ("2: Remove"); 
     System.out.println ("3: Display"); 
     System.out.println ("4: Exit"); 

     System.out.print ("\nChoice: "); 
     choice = input.nextInt(); 

     switch (choice) 
     { 
      case 1: 
       System.out.print ("\nEnter a number: "); 
       int num = input.nextInt(); 
       q1.add (num); 
       break; 
      case 2: 
       q1.remove(); 
       break; 
      case 3: 
       q1.display(); 
       break; 
      case 4: 
       System.out.println ("Good Bye"); 
       break; 
      default: 
       System.out.println ("Wrong choice!"); 
       break; 
     } 

    } while (choice != 4); 


} 

}

공용 클래스 큐 {

private final int SIZE; 
private int first; 
private int last; 
private int[] q; 

public Queue() 
{ 
    SIZE = 5; 
    q = new int[ SIZE ]; 
    first = 0; 
    last = 0; 
} 

public boolean isFull() 
{ 
    return last == SIZE; 
} 

public boolean isEmpty() 
{ 
    return last == first; 
} 

public void add (int x) 
{ 
    if ( ! isFull()) 
    { 
     q[ (first + last) % q.length ] = x; 
     last ++; 
    } else 
    { 
     System.out.println ("\nThe queue is full!"); 
    } 
} 

int remove() 
{ 
    int x = 0; 
    if ( ! isEmpty()) 
    { 
     x = q[ first ]; 
     first = (first + 1) % q.length; 
     last --; 
    } else 
    { 
     System.out.println ("The queue is empy"); 
    } 
    return x; 

} 

public void display() 
{ 
    if ( ! isEmpty()) 
    { 
     for (int i = first; i < SIZE; i ++) 
     { 
      System.out.println (q[ i ]); 
     } 


    } else 
    { 
     System.out.println ("The queue is emptry"); 
    } 
} 
+2

스택 오버플로에 오신 것을 환영합니다! 디버깅 도움을 요청하는 질문 ("이 코드가 작동하지 않는 이유는 무엇입니까?")에는 원하는 동작, _a 특정 문제 또는 error_ 및 _ 그 자체를 재현하는 데 필요한 _ 최단 코드 **가 포함되어야합니다. 분명한 문제 성명이없는 질문은 다른 독자에게 유용하지 않습니다. 참조 : [최소한의 완전하고 검증 가능한 예제를 만드는 방법] (http://stackoverflow.com/help/mcve). –

답변

0

그것은 꽤 잘했다. 오류에 대해 구체적으로 설명해 주시겠습니까?

+0

을 입력하면 1,2,3,4,5를 제거한 다음 1과 2를 제거하면됩니다. 그런 다음 표시하려면 3,4,5를 얻으십시오. 6과 7을 더하고 싶지만 보이지는 않을 것입니다. 그래서 당신이 전시한다면, 당신은 여전히 ​​3,4,5를 얻을 것입니다. 여하튼 큐의 뒤쪽에서 6과 7을 볼 수있게해야합니다. –

0

add()는 last 만 업데이트해야합니다. remove()는 first 만 업데이트해야합니다. add()는 큐가 가득 차는 것을 방지 할 필요가있다. 또는 큐는 큐가 가득 찼는지를 체크하기 위해 큐의 엘리먼트 수를 사용할 필요가있다. case add()는 대기열 오버플로를 방지해야합니다. add()는 add()가 성공했는지 (오버플로 없음) 또는 실패했는지 (오버플로)를 나타내는 코드를 반환 할 수 있습니다. add()는 선택적으로 대기열이 이전에 비어 있었음을 나타 내기 위해 세 번째 코드 값을 반환 할 수 있습니다. 대기열이 비어 있지 않은 상태로 전환 될 때 특별한 조치가 필요한 경우가 있습니다.

+0

고맙습니다. –