大家好我正在尝试实现一个圆形数组,但有些东西并不完全正确。我不确定是否在添加方法或显示中。当你运行调试器时,数字在那里,但我不能按顺序。请你看看并给我一个反馈。谢谢。
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");
}
}
答案 0 :(得分:0)
效果很好。你能更具体地说明你的错误吗?
答案 1 :(得分:0)
add()只应更新last
。 remove()只应更新first
。 add()需要防止队列变满,或者代码需要使用队列中的元素计数来检查队列是否已满(相对于空,因为last == first,如果为空或满),其中case add()需要防止队列溢出。 add()可以返回一个代码来指示add()是否成功(没有溢出)或者是否失败(溢出)。 add()可以选择返回第三个代码值来指示队列以前是空的,以防队列从空变为非空时需要一些特殊操作。