Java Stack peek方法显示0而不是正确的数字

时间:2016-07-22 23:57:05

标签: java linked-list stack pop peek

好的,所以我参加了一个关于java的暑期课程。是的,这是课堂上的一项任务,但我很难过,已经休息了一下,但似乎无法理解逻辑错误是什么。我是使用链接列表进行堆栈。外部和内部类应该在UserStack中实现。 UserStack实现了教师提供的MyStack。 StackApp是主要的。它编译并运行。它正确地要求输入一个整数。如果有东西需要删除,将删除,如果有东西要显示,将尝试查看。但它总是说它已删除或显示数字0.我是否需要尝试执行toString覆盖?我问我的教授,他告诉我像其他学生一样去谷歌。

MyStack.java

public interface MyStack
{
    public void push (int item);

    public int pop ();

    public int peek ();

    public boolean isEmpty ();

}

UserStack.java

import java.util.NoSuchElementException;

public class UserStack implements MyStack
{
    private class Node
    {
        public int value;
        public Node link;

        public Node(int data)
        {
            data = value;
        }
    }

    private Node head = null;

    public void push (int item)
    {
        Node newHead = new Node(item);
        newHead.link = head;
        head = newHead;
    }

    public int pop ()
    {
        if(isEmpty())
            throw new NoSuchElementException();
        int tmp = head.value;
        head = head.link;

        return tmp;
    }

    public int peek ()
    {
        if(isEmpty())
            throw new NoSuchElementException();

        int tmp = head.value;

        return tmp;
    }

    public boolean isEmpty ()
    {
        return head == null;
    }
}

StackApp.java

import java.util.Scanner;

class StackApp
{
    UserStack stack = new UserStack();
    public void displayMenu()
    {
        System.out.println ("1) Add an integer to the list\n" +
                            "2) Remove last integer entered\n" +
                            "3) Look at last integer entered\n" +
                            "0) Exit the program");
        System.out.print ("Selection: ");
    }

    public StackApp()
    {
        int option;
        Scanner input = new Scanner(System.in);

        do{
        displayMenu();
        option = input.nextInt();

        switch (option)
        {
            case 1:
              int number;
              System.out.println("Enter integer to add: ");
              number = input.nextInt();
              stack.push(number);
              break;
            case 2:
              int number2 = stack.pop();
              System.out.println("Interger removed: " + number2);
              break;
            case 3:
              int number3 = stack.peek();
              System.out.println("Next Interger: " + number3);
              break;
            case 0:
              System.out.println("Goodbye");
              break;
            default:
              System.err.println("Unrecongized choice");
              break;
        }
        }while(option != 0);
    }

    public static void main(String[] args)
    {
        new StackApp();
    }
}

2 个答案:

答案 0 :(得分:0)

您永远不会设置新项目的value

答案 1 :(得分:-1)

配合,尝试在Node构造函数中切换值赋值:

原文:

public Node(int data)
        {
            data = value;
        }

新:

public Node(int data)
        {
            this.value = data;
        }

此外,使用关键字“this”非常重要,因为您要让程序知道我们要将此类级变量“value”设置为数据级别。因此,您必须使用关键字“this”。我很确定你的任务有点偏,因为你设置的“数据”等于“值”,并且,因为值从未显式设置初始值,所以它默认为0.