0

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

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

我们必须使用具有 5 个选项的菜单创建一个垂直堆叠的数组: 1- Push 2- Pop 3- Top 4- Display 5- Quit

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

我的讲师给了我们这个提示“你可以'Pop'然后'Push'才能'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();
    }
4

1 回答 1

0

我建议在类本身上定义pop()andpush()方法。Array然后你可以定义top()如下:

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

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

我还建议使用异常,而不是错误条件,并为使用Array的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");
       }
    }
}
于 2013-11-06T19:56:37.393 回答