2017-04-01 60 views
0

嗨,大家我想实现一个圆形阵列,但有些东西不完全正确。我不确定是否在添加方法或显示中。当你运行调试器时,数字在那里,但我不能让他们按顺序。请你能看看并给我一个反馈。谢谢。圆形队列阵列

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

欢迎来到Stack Overflow!寻求调试帮助的问题(“为什么这个代码不工作?”)必须在问题本身中包含所需的行为,特定的问题或错误以及必要的最短代码**。没有明确问题陈述的问题对其他读者无益。请参阅:[如何创建最小,完整和可验证示例](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()需要防止队列满,或者代码需要使用队列中的元素数来检查队列是否已满(相对于空,因为last == first,如果是empty或full),其中case add()需要防止队列溢出。 add()可以返回一个代码来指示add()是否成功(没有溢出)或者失败(溢出)。 add()可以选择返回第三个代码值,以指示队列先前为空,以防队列从空变为非空时需要执行某些特殊操作。

+0

谢谢,我会放弃它。 –