JAVA队列-单元测试失败

JAVA队列-单元测试失败,java,unit-testing,queue,Java,Unit Testing,Queue,好的,我正在尝试对我的DSAQueue类进行单元测试,结果显示,isEmpty()、isFull()和dequeue()方法失败 以下是我的DSAQueue代码。 我认为我的Dequeue()方法出了问题,我无法找出哪里出了问题。 请帮我弄清楚。 非常感谢。提前 这是我的密码: public class DSAQueue { int count; Object[] queue; public static int DEFAULT_CAPACITY = 100;

好的,我正在尝试对我的DSAQueue类进行单元测试,结果显示,isEmpty()isFull()dequeue()方法失败

以下是我的DSAQueue代码。 我认为我的Dequeue()方法出了问题,我无法找出哪里出了问题。 请帮我弄清楚。 非常感谢。提前

这是我的密码:

public class DSAQueue {
    int count;
    Object[] queue;
    public static int DEFAULT_CAPACITY = 100;


    public DSAQueue(){
        count = 0;
        queue = new Object[DEFAULT_CAPACITY];
    }

    public DSAQueue(int maxCapacity){
        count = 0;
        queue = new Object[maxCapacity];
    }

    public int getCount(){
        return count;
    }

    public boolean isEmpty(){
        boolean empty = (count==0);
        return empty; 
    }

    public boolean isFull(){
        boolean full = (count == queue.length);
        return full;
    }

    public void enqueue(Object value){

        if (isFull())
            throw new IllegalArgumentException("Queue is full");
        else
            queue[count] = value;

        count++;
    }

    public Object dequeue(){
        Object frontVal;
        frontVal = peek();
        count--;
        return frontVal;
    }

    public Object peek(){
        Object frontVal;
        if (isEmpty()) 
            throw new IllegalArgumentException("Queue is empty");
        else
            frontVal = queue[0];

        return frontVal; 
    }
}

您是对的,您的
dequeue()
并没有做到它的名称所暗示的:

  • 它执行
    peek()
    以获取第一项
  • 它减少了
    计数
    ,因此保持一致
  • 但是,它从不修改底层数组
    队列
    。元素就留在那里

该实现实际上不适合队列数据结构。您的队列首部位于位置0,但您在尾部添加/删除项目。你应该从后面排队,从前面排队


如果你想继续使用一个数组(这是合理的,因为队列必须是有界的),请考虑使用它作为一个数组。另一种选择是将队列实现为链表。

噢!好吧,但我该怎么修呢?对不起,我是新来排队的。请你详细说明一下好吗?我应该如何修改底层数组队列?只要想想操作需要做什么,您就会找到答案。您需要的是一个相当基本的数组操作…出列操作会更新内部表示,但它会从错误的一端删除。