0

我收到一个错误:

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--;
        }

    }

 }
4

2 回答 2

0

您在多个地方:

back = (back - 1) % size;

这并不像你想象的那样在back最初的时候0,它变成的地方-1 % size,通常是-1。在它出现的地方,你应该改用:

back = (size + back - 1) % size;
于 2018-10-07T20:49:39.283 回答
-1

我注意到的第一件事是你为这个问题使用了太多的变量。如果你把它分解,你只需要 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;        
 }

这也应该解决你的数组索引问题我不知道你为什么使用模函数'%'作为返回的当前位置。

于 2018-10-07T22:33:47.477 回答