输入输出和java中的解析错误

问题描述 投票:0回答:1

我有两个类,一个类调用另一个类。

下面是一个类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次

java io is-empty
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.