我在Java中显示我的队列实现的内容。虽然环绕工作(队列的大小是3),但是当队列的前面大于后面时,我在显示队列时遇到了麻烦。
以下是我用来显示的代码:
System.out.println("front");
System.out.println("=====");
if(front < rear ) {
for(int i = front; i != rear; i++ ) {
System.out.println(i +":> " + queue[i]);
}
}
else {
for(int i = front; i != rear; i= (i + 1) % SIZE ) {
System.out.println(i +":> " + queue[i]);
}
}
System.out.println("=====");
例如,假设前面是1,后面是0和SIZE = 3
。
我的代码按此顺序打印出queue[1]
,queue[2]
的内容。
为什么它会在i == 2
时终止?不应i= (i + 1) % SIZE
将i
的值更改为0,从而使其等于后方,然后打印出queue[0]
的值?
答案 0 :(得分:0)
假设SIZE = 3
和rear <= front
,让我们说rear = 0
,front = 2
,那么for循环的执行就像这样:
i = 2
i = (2+1) % 3 = 0
i != rear
或0 != 0
,这是假的,终止循环。假设这是一个循环缓冲区,我会像这样迭代它:
int i = front;
do{
System.out.println(i);
i++;
if(i >= SIZE){
i = 0;
}
}while(i != (rear+1) % SIZE);
答案 1 :(得分:0)
当i == 2时,它将在当前迭代结束时变为0 然后i == 0,后面== 0,i ==后面,循环终止。
编辑:这有效,但看起来并不优雅
int i = front;
for(; i != rear; i= (i + 1) % SIZE ) {
System.out.println(i +":> " + queue[i]);
}
System.out.println(i +":> " + queue[i]);
答案 2 :(得分:0)
答案 3 :(得分:0)
当i ==后方时,你的循环将不会执行,因为i!=后面是假的。 如果你想循环,做一些像:
int i = front;
do{
System.out.println(i +":> " + queue[i]);
i=(i+1)%Size;
}while(i != front)