使用BlueJ,我可以'流行'和'推'但不能'顶'?

时间:2013-11-06 19:51:10

标签: java push pop bluej

(学生软件开发人员在这里!)

我们(我们的班级)最近使用BlueJ开始了一个新的java主题。这对我来说是全新的,但到目前为止,我很享受和理解它。

我们必须使用包含5个选项的菜单创建垂直堆叠的数组: 1-推 2-流行音乐 3-顶部 4-显示 5-退出

我设法编写了除“Top”之外的所有内容(在堆栈/数组的顶部显示整数)

我的讲师给了我们这个暗示“你可以'流行'然后'推'才能'顶''但我不太确定如何让它工作?

这是我的菜单代码:

public static void main()
    {
        int option;
        Array a = new Array();
        String []menuitems = {"1 - Push","2 - Pop","3 - Top","4 - Display","5 - Quit"};            
        Menu m = new Menu(menuitems,5);

        a.add(4);a.add(2);a.add(28);a.add(15);

        do
        {
            clrscr();
            option = m.showMenu();
            if ( option == 1 )                                
                doPush(a);   
            if ( option == 2 )                                
                doPop(a);   
            if ( option == 3 )                                
                doTop(a);   
            if ( option == 4 )                
            {                    
                a.display();
                pressKey();
            }
        }
        while ( option != 5 );
        System.out.println("Done - You Can Now Close");
    }

这是我的推送代码:

public static void doPush(Array a)
    {
        if ( a.isFull() )
                {
                    System.out.print("\nArray Full!");                        
                }
                else {
                    int item;
                    System.out.print("Enter number to push: ");
                    item = Genio.getInteger();

                    if ( a.addToFront(item) == false)
                        System.out.print("\nArray Is Full!");
                    System.out.print("\nArray with new value: \n");
                    a.display();
                }
                pressKey();
    }

这是我的Pop代码:

public static void doPop(Array a)
    {
        if ( a.isEmpty() ) {
            System.out.println("\nArray is Empty!");
            pressKey();
            return;
        }
        else
        {
            int item;
            item = Genio.getInteger();
            System.out.println("\nArray popped!");
        }


                pressKey();
    }

希望我走在正确的轨道上,任何帮助都会非常感激!

提前致谢。

1 个答案:

答案 0 :(得分:0)

我建议在pop()类本身定义push()Array方法。然后,您可以按如下方式定义top()

public int top() {
    int topValue = pop();
    push(topValue);
    return topValue;
}

即。你将它从堆栈中弹出,记下值,然后将其推回堆栈。这不是一个超级高效的实现,但如果这是他的提示,那么我会这样做。

我还建议使用异常,而不是System.out.println()用于错误条件,并为使用数组的Stack定义一个特定的类:

public class Stack {

    private Array array = new Array();

    public int push(int item) {
        if (!array.addToFront(item)) {
            throw new IllegalStateException("Stack is full");
        }
        /* TODO: It would be better (more idiomatic) for the Array.addToFront()
         * method threw this exception rather than returning a boolean.
         */ 
    }

    public int pop() {
        assertStackNotEmpty();

        // TODO: Remove the item from the front of the array
        //       and shuffle everything along

        return item;
    }

    public int peek() {
        assertStackNotEmpty();
        return array.get(0);
    }

    /**
     * Lecturer's suggested implementation of peek()
     */
    public int top() {
        int item = pop();
        push(item);
        return item;
    }

    private void assertStackNotEmpty() {
       if (array.isEmpty()) {
           throw new EmptyStackException("Stack is empty");
       }
    }
}