我有两个类,一个类调用另一个类。
下面是一个类Stack
,创建一个变量类型stack
import java.util.Iterator;
import java.util.NoSuchElementException;
public class Stack<Item> {
private Node first = null;
private class Node {
private Item item;
private Node next;
}
public boolean isEmpty() { return first == null; }
public void push(Item item) {
Node second = first;
first = new Node();
first.item = item;
first.next = second;
}
public Item pop() {
Item item = first.item;
first = first.next;
return item;
}
}
在这里,我有一个名为Evaluate
的类,它调用Stack
并根据输入创建一个堆栈。
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class Evaluate {
public static void main(String[] args) {
Stack<String> ops = new Stack<String>();
Stack<Double> vals = new Stack<Double>();
while (!StdIn.isEmpty()) {
String s = StdIn.readString();
if (s.equals("(")) ;
else if (s.equals("+")) ops.push(s);
else if (s.equals("*")) ops.push(s);
else if (s.equals(")")) {
String op = ops.pop();
if (op.equals("+")) vals.push(vals.pop() + vals.pop());
else if (op.equals("*")) vals.push(vals.pop() * vals.pop());
}
else vals.push(Double.parseDouble(s));
//When seeing a number, it gets pushed on to the stack
}
StdOut.println(vals.pop());
}
}
我尝试了两种不同的输入:( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
和1+2
。
在第一个输入情况下,终端要求另一个输入。在第二种情况下,它返回以下错误消息:
`java.lang.NumberFormatException: For input string: "1+2"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at Evaluate.main(Evaluate.java:18)`
我使用http://www.cs.princeton.edu/courses/archive/spr15/cos126/lectures/43stack.pdf
作为学习Java的资源,上面的代码直接来自讲义。我看过代码,我没有看到一个明显的错误(我认为是一个讲义,它可能没有。)
我知道它超过了isEmpty
,因为我在while条件(StdOut.println(3);
)的正下方添加了isEmpty
,当我输入1 + 2
时它确实打印出3次