2016-07-22 40 views
1

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

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

Typo in your' Node'构造函数:'data = value;'应该是'value = data;'。 –

+0

非常感谢。自从周一以来我一直在盯着这个,从来没有注意到这一点。 – GenCrash10

回答

0

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

+0

对我来说,这似乎相当明显,问题不在于'push',而是在'Node'构造函数中...... –

+0

对于初学者来说,对于专家来说显而易见的东西可能不是什么。 – SomeStudent

+0

@SomeStudent乔恩指的是这个答案的以前的状态。 – EJP

-1

伴侣,尝试在您的节点构造围绕你的价值分配切换:

原文:

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

新:

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

另外,关键字的使用 “这”因为您正在让程序知道我们要将此类级变量“值”设置为数据值。因此,您必须使用关键字“this”。我相当肯定你的任务有点偏离,因为你设置的“数据”等于“值”,并且,因为值从未有明确设置的初始值,所以它默认为0.

+0

在这里使用'this' *不是必须的,尽管我同意这是在构造函数中的一个好习惯,就像使用同样的参数名一样。 – EJP

相关问题