好的,所以我参加了一个关于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();
}
}
答案 0 :(得分:0)
您永远不会设置新项目的value
。
答案 1 :(得分:-1)
配合,尝试在Node构造函数中切换值赋值:
原文:
public Node(int data)
{
data = value;
}
新:
public Node(int data)
{
this.value = data;
}
此外,使用关键字“this”非常重要,因为您要让程序知道我们要将此类级变量“value”设置为数据级别。因此,您必须使用关键字“this”。我很确定你的任务有点偏,因为你设置的“数据”等于“值”,并且,因为值从未显式设置初始值,所以它默认为0.