循环队列数组

时间:2017-04-01 12:16:01

标签: java arrays queue

大家好我正在尝试实现一个圆形数组,但有些东西并不完全正确。我不确定是否在添加方法或显示中。当你运行调试器时,数字在那里,但我不能按顺序。请你看看并给我一个反馈。谢谢。

public static void main (String[] args)
{
    Scanner input = new Scanner (System.in);
    Queue q1 = new Queue();
    int choice = 0;

    do
    {
        System.out.println ("Menu:");
        System.out.println ("1: Add");
        System.out.println ("2: Remove");
        System.out.println ("3: Display");
        System.out.println ("4: Exit");

        System.out.print ("\nChoice: ");
        choice = input.nextInt ();

        switch ( choice )
        {
            case 1:
                System.out.print ("\nEnter a number: ");
                int num = input.nextInt ();
                q1.add (num);
                break;
            case 2:
                q1.remove ();
                break;
            case 3:
                q1.display ();
                break;
            case 4:
                System.out.println ("Good Bye");
                break;
            default:
                System.out.println ("Wrong choice!");
                break;
        }

    } while ( choice != 4 );


}

}

公共类队列 {

private final int SIZE;
private int first;
private int last;
private int[] q;

public Queue ()
{
    SIZE = 5;
    q = new int[ SIZE ];
    first = 0;
    last = 0;
}

public boolean isFull ()
{
    return last == SIZE;
}

public boolean isEmpty ()
{
    return last == first;
}

public void add (int x)
{
    if (  ! isFull () )
    {
        q[ ( first + last ) % q.length ] = x;
        last ++;
    } else
    {
        System.out.println ("\nThe queue is full!");
    }
}

int remove ()
{
    int x = 0;
    if (  ! isEmpty () )
    {
        x = q[ first ];
        first = ( first + 1 ) % q.length;
        last --;
    } else
    {
        System.out.println ("The queue is empy");
    }
    return x;

}

public void display ()
{
    if (  ! isEmpty () )
    {
        for ( int i = first; i < SIZE; i ++ )
        {
            System.out.println (q[ i ]);
        }


    } else
    {
        System.out.println ("The queue is emptry");
    }
}

2 个答案:

答案 0 :(得分:0)

效果很好。你能更具体地说明你的错误吗?

答案 1 :(得分:0)

add()只应更新last。 remove()只应更新first。 add()需要防止队列变满,或者代码需要使用队列中的元素计数来检查队列是否已满(相对于空,因为last == first,如果为空或满),其中case add()需要防止队列溢出。 add()可以返回一个代码来指示add()是否成功(没有溢出)或者是否失败(溢出)。 add()可以选择返回第三个代码值来指示队列以前是空的,以防队列从空变为非空时需要一些特殊操作。