Java 我的代码没有打印队列的所有元素。错误是什么?

Java 我的代码没有打印队列的所有元素。错误是什么?,java,Java,这是我的排队课。我已经用数组实现了它 public class QueueUsingArray { private int data[]; private int firstElementIndex; private int nextElementIndex; private int size; public QueueUsingArray() { data = new int[10]; firstElementIndex = -1; nextElementIndex

这是我的排队课。我已经用数组实现了它

public class QueueUsingArray {

private int data[];
private int firstElementIndex;
private int nextElementIndex;
private int size;

public QueueUsingArray() {
    data = new int[10];
    firstElementIndex = -1;
    nextElementIndex = 0;
    size = 0;
}

public int size() {
    return size;
}

public boolean isEmpty() {
    return size() == 0;
}

private void checkEmpty() throws QueueEmptyException {
    if (size == 0) {
        QueueEmptyException e = new QueueEmptyException();
        throw e;
    }
}

public int front() throws QueueEmptyException {
    checkEmpty();
    return data[firstElementIndex];
}

public int dequeue() throws QueueEmptyException {
    checkEmpty();
    int output = data[firstElementIndex];
    size--;
    data[firstElementIndex] = 0;
    firstElementIndex = (firstElementIndex + 1) % data.length;
    if (size == 0) {
        firstElementIndex = -1;
        nextElementIndex = 0;
        size = 0;
    }
    return output;
}

public void enqueue(int element) {
    if (size == data.length) {
        int[] temp = data;
        data = new int[data.length * 2];
        int k = 0;
        for (int i = firstElementIndex; i < temp.length; i++) {
            data[k] = temp[i];
            k++;
        }

        for (int i = 0; i < firstElementIndex; i++) {
            data[k] = temp[i];
            k++;
        }
        firstElementIndex = 0;
        nextElementIndex = temp.length;
    }
    if (size == 0) {
        firstElementIndex = 0;
    }
    data[nextElementIndex] = element;
    size++;
    nextElementIndex = (nextElementIndex + 1) % data.length;
}
}
公共类队列使用阵列{
私有整数数据[];
私有int firstElementIndex;
私有int-nextElementIndex;
私有整数大小;
公共队列使用阵列(){
数据=新整数[10];
firstElementIndex=-1;
nextElementIndex=0;
尺寸=0;
}
公共整数大小(){
返回大小;
}
公共布尔值为空(){
返回大小()==0;
}
private void checkEmpty()引发QueueEmptyException{
如果(大小==0){
QueueEmptyException e=新的QueueEmptyException();
投掷e;
}
}
public int front()引发QueueEmptyException{
checkEmpty();
返回数据[firstElementIndex];
}
public int dequeue()抛出QueueEmptyException{
checkEmpty();
int输出=数据[firstElementIndex];
大小--;
数据[firstElementIndex]=0;
firstElementIndex=(firstElementIndex+1)%data.length;
如果(大小==0){
firstElementIndex=-1;
nextElementIndex=0;
尺寸=0;
}
返回输出;
}
公共void排队(int元素){
if(size==data.length){
int[]温度=数据;
data=newint[data.length*2];
int k=0;
对于(int i=firstElementIndex;i
这是我的QueueUse类

public class QueueUse {

public static void main(String[] args) throws QueueEmptyException {

    QueueUsingArray q=new QueueUsingArray();

    q.enqueue(10);
    q.enqueue(20);
    q.enqueue(30);
    q.enqueue(40);
    q.enqueue(50);
    q.enqueue(60);
    q.enqueue(70);
    q.enqueue(80);
    q.enqueue(90);
    q.enqueue(100);
    q.enqueue(110);
    q.enqueue(120);
    q.enqueue(130);
    q.enqueue(140);
    q.enqueue(150);
    q.enqueue(160);
    q.enqueue(170);
    q.enqueue(180);
    q.enqueue(190);
    q.enqueue(200);
    q.enqueue(210);
    q.enqueue(220);
    q.enqueue(230);
    q.enqueue(240);
    q.enqueue(250);
    q.enqueue(260);
    q.enqueue(270);
    q.enqueue(280);
    q.enqueue(290);
    q.enqueue(300);

    System.out.println("All elements");

    for(int i=0;i<q.size();i++){
        try {
            System.out.println(q.dequeue());
        } catch (QueueEmptyException e) {
            System.out.println("Sorry");
        }
    }
}

}
公共类队列使用{
公共静态void main(字符串[]args)引发QueueEmptyException{
QueueUsingArray q=新的QueueUsingArray();
q、 排队(10);
q、 排队(20);
q、 排队(30);
q、 排队(40);
q、 排队(50);
q、 排队(60);
q、 排队(70);
q、 排队(80);
q、 排队(90人);
q、 排队(100);
q、 排队(110);
q、 排队(120);
q、 排队(130);
q、 排队(140);
q、 排队(150);
q、 排队(160);
q、 排队(170);
q、 排队(180);
q、 排队(190);
q、 排队(200);
q、 排队(210);
q、 排队(220);
q、 排队(230);
q、 排队(240);
q、 排队(250);
q、 排队(260);
q、 排队(270);
q、 排队(280);
q、 排队(290);
q、 排队(300);
系统输出打印项次(“所有元素”);

for(int i=0;i您的print方法不起作用,因为每次在for循环中调用
dequeue()
方法时,您都会减小大小。如果要使用for循环,您应该使用固定大小。基本上在这条语句中
(i
随着
i
的增长
size
的减少。如果
i=0
size=4
第一个循环
i
将是1,
size
将是3。你永远不会到达队列中的第0个或第一个元素,因为到下一个循环时,你已经在
i=2
size=3

首先,应该为队列项添加一个getter

public int getElementAt(int index){
   return data[index];
}

然后可以在for循环中为数据中的每个索引调用该方法

 int length = q.size();
      for(int i = 0; i < length; i++){
            System.out.println(q.getElementAt(i));
 }

调试时您看到了什么?更多:调试是第一步。为什么要调用
q.enqueue()
30次?建议:使用for loop
for(国际卢旺达问题国际法庭=10;ictr@T.J.Crowder我已经试过调试。它只是在打印140后从循环中出来。@Nimesh我会这样做,但请先告诉我问题的解决方案。谢谢。@iVvaibhav:那不是调试。请阅读链接。调试是在调试程序中运行代码,逐语句逐条执行,检查变量,等等。如果你这样做,你会发现逻辑中的错误。学习有效地调试是学习编程的一个组成部分,我们都必须学习它,而且我们每天都必须学习。谢谢它奏效了……)我只有一个问题。每当我想要打印队列元素时,我都必须初始化一个变量作为队列的大小?请弄清楚。这取决于您的实现。对循环使用动态大小不是好的做法
public class Queue {
    private Vector<String>  data ;

    Queue(){
    data = new Vector();
    }
    public void enqueue(String item){
    data.add(item);
    }

    public void dequeue(){
    data.remove(0);
    }


    public void printQueueItems(){

       int length = data.size();
        for(int i = 0; i < length; i++){
            System.out.println(data.get(i));
        }
    }

    public static void main(String[] args) {  
    Queue myQ = new Queue();

    myQ.enqueue("hello");
    myQ.enqueue("world");
    myQ.enqueue("!");
    myQ.printQueueItems();

    }

}