如何修复 ArrayIndexOutOfBounds 异常:ArrayDeque 中的 -1

我收到一个错误:


java.lang.ArrayIndexOutOfBoundsException: -1

它指的是方法注入:


deque[back] = x;

我也有 push 和 pop 的方法,它们在前面添加和删除项目,但这些工作正常。


这个想法是使用基于数组的实现作为双端队列,其中在后面注入和弹出插入项并在后面删除项。


  public void inject(int x){


        if (elementCount == size){


            System.out.println("The Deque is Full");

        } else {




            deque[back] = x;            

            back = (back - 1) % size;            

            elementCount ++;


        }


    }


    public class Deque {


    int[] deque;

    int front;

    int back;

    int size;

    int elementCount;


  public Deque(int s){


           size = s;

           deque = new int[size];


           front = 1;

           back = 0;        

           elementCount = 0; //n of elements


     }


    public int getRear(){


        return deque[back];

    }   


    public int getFront(){


        return deque[front];


    }



 public void inject(int x){


            if (elementCount == size){


                System.out.println("The Deque is Full");

            } else {


                deque[back] = x;            

                back = (back - 1) % size;            

                elementCount ++;


     }


  }


   public void eject(){


            if (elementCount == 0){


                System.out.println("The deque is empty");


            }else{


                back = (back + 1) % size;

                elementCount--;

        }


    }


 }



富国沪深
浏览 280回答 2
2回答

holdtom

你在多个地方:back = (back - 1) % size;这并不像您认为的那样在back最初的时候起作用0,它变成了-1 % size,通常是-1. 在它出现的地方,你应该使用:back = (size + back - 1) % size;

qq_笑_17

我注意到的第一件事是您为这个问题使用了太多变量。如果将其分解,则只需要 3 个变量。阵列、阵列的大小和阵列中用于注入和弹出的当前位置。这是一个 LiFo(后进先出)订单。public void inject(int x){    if (this.deque.size() == this.size){ //check for full array        System.out.println("The Deque is Full");    } else {        this.deque[this.back+1] = x;  //input new item next slot                    this.back ++; //increment back to new input where eject would pull from                   }}public class Deque {int[] deque;int back;int size;public Deque(int s){       this.size = s;       this.deque = new int[size];       this.back = 0;         }这也应该解决你的数组索引问题我不知道你为什么使用模函数'%'作为back的当前位置。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java