我正在为后缀表达式计算器使用扫描仪,并遇到轻微问题。当我通过命令行输入表达式时,表达式不会终止并达到无限循环。使用print语句和jdb,我能够推断出我希望的命令都能正常执行并正确评估,但是我无法弄清楚为什么扫描程序不会终止(因此将它留在无限的while循环中)。我知道扫描仪必须吃掉输入信息,而不是仅仅确定它是否被留下,它应该在做什么(我相信)。当我将我的扫描仪作为我希望评估的表达式输入而不是System.in(用于命令行输入)时,所有事情都会根据需要终止,这就是为什么我非常困惑。有没有人遇到过这个问题?我会在下面发布一些简洁的代码片断,取自未能终止的主体。Postfix评估器 - 扫描仪问题?
Scanner i = new Scanner(System.in);
System.out.println("Message...");
StackList stack = new StackLinkedList();
while (i.hasNext()) {
if (input.hasNextInt()) {
stack.push(i.nextInt());
continue;
}
String op = input.next());
Integer val_one = stack.pop();
Integer val_two = stack.pop();
switch(op) { a switch statement that evaluates based on the operator};
}
input.close();
System.out.println(stack.pop);
注:我已经检查过以前的实现,并且我找不到我的不同之处。大多数遇到这些类型问题的人都不会随意使用输入,我相信我的代码应该这样做。我输入的表达式如1 2 +'Enter'(答案应该是3,当我将扫描器设置为字符串1 2 +时,确实出现了3),但是当输入是通过命令行时,它们不会终止。
我欣赏的反馈;我发现大多数人都是通过单行阅读来获得投入,但实际上并没有意识到这一点至关重要。我会改变,看看会发生什么。所以这里是攻击计划:我可以使用nextLine命令而不是next和nextInt将输入读入字符串中,然后解析字符串?你在说什么? – Eric 2015-02-10 06:27:09
也,我需要做ctrl-d输入吗?我们的任务没有提到任何关于这个,我觉得她会解释(但是,我只知道C和Cpp,因为我跳过这个类的Intro Java,这是一种预先搜索) – Eric 2015-02-10 06:40:11
@Eric Ctrl-D行为和文件末尾一样 - 所以'hasNext'返回false - 并且它不是特定于Java的。可能您的任务期望您一次处理一行,或者可能期望您对某个字符串进行硬编码。如果你不清楚,就问问某人 - 这个问题与作业没有直接关系,所以并不要求他们为你做你的工作。 – immibis 2015-02-10 06:44:52