带有环绕显示的Deque不显示所有索引(Java)

时间:2015-10-05 01:45:42

标签: java

大家好,我有一个问题!

我尝试使用环绕式实现Dequeue,并且在大多数情况下我认为我已正确实现了它。但问题是显示Dequeue的内容。

我遇到问题的部分是display方法中的else-if语句。每当左侧做到它时,我就会遇到问题。

我无法发布图片,至少需要10个我不了解的声誉。

输入的输入:     insertRight(10);     insertLeft(9);     insertRight(8);     insertLeft(7);     insertRight(6);     insertLeft(5);     insertRight(4);     insertLeft(3);     insertRight(7);     insertLeft(2);

预期产出:1 3 5 7 9 10 8 6 4 2

public class Dequeue
{
private int[] deArray;
private int maxSize;
private int nItems;
private int left;
private int right;

public Dequeue(int size) {
    maxSize = size;
    deArray = new int[maxSize];
    left  = (maxSize/2)+1;
    right = (maxSize/2);
    nItems = 0;
}

public boolean insertLeft(int j)
{
    if(isFull())
    {
        System.out.println("The dequeue is full.");
        return(false);
    }
    if (left == 0)
        left = maxSize;
    deArray[--left] = j;

    nItems++;
    return(true);
}

public boolean insertRight(int j)
{
    //takes an integer and returns false if DQ is full, otherwise insert Right or Rear
    if(isFull())
    {
        System.out.println("The dequeue is full.");
        return(false);
    }
    if(right == maxSize - 1)
        right = -1;
    deArray[++right] = j;

    nItems++;
    return(true);
}

public int removeLeft()
{
    //if the DQ is not empty, removes and returns integer on left or front
    if(isEmpty())
    {
        System.out.println("The dequeue is empty.");
        return(0);
    }
    int temp = deArray[left];
    if (left == maxSize - 1)
        left = 0;
    else
        left++;
    nItems--;
    return temp;

}

public int removeRight()
{
    //if the DQ is not empty, removes and returns integer on right or rear
    if (isEmpty())
    {
        System.out.println("Dequeue is empty.");
        return (0);
    }
    int temp = deArray[right];
    right--;
    if(right<0)
        right = maxSize -1;
    nItems--;
    return temp;
}



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

public boolean isFull()
{
    return(nItems == maxSize);
}

public void display()
{
    int i;
    System.out.println("Right is equal to: " +right+" and left is equal to: " +left+ "\n");
    System.out.println("\nMaxsize is equal to: "+maxSize);

    if(isEmpty())
        throw new RuntimeException("The dequeue is empty.");
    if(left < right)
    {
        for(i= right; i<left; i++)
        {
            if(i==maxSize)
                i = 0;
            System.out.print(deArray[i]+ " ");
        }
        for(i=left; i< right+1;i++)
        {
            if(i==maxSize)
                i = 0;
            System.out.print(deArray[i]+ " ");
        }
    }

    else if (right < left)
    {
        for(i = right; i < left; i++)
            if(i == maxSize)
                {i = 0;}
            System.out.print(deArray[i] + " ");
        for(i = left+1; i <= ((maxSize-1)); i++)
            System.out.print(deArray[i] + " ");
    }
    else
        System.out.println("Oh no!");
}}

0 个答案:

没有答案