我将扫描仪用于后缀表达式评估器,但遇到了一个小问题。当我通过命令行输入表达式时,表达式不会终止并达到无限循环。使用print语句和jdb,我可以推断出我想要的所有命令都能正常执行并正确评估,但是,我无法弄清为什么扫描器不会终止(因此,将其置于无限的while循环中)。我知道扫描仪必须吃掉输入,而不仅仅是确定它应该被留下(我相信)。当我输入扫描仪作为要评估的表达式而不是System.in(用于命令行输入)时,一切都按期望终止,这就是为什么我很困惑的原因。有人遇到过这个问题吗?我将在下面发布一些简短的代码片段,这些片段摘自未能终止的主体。
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);
注意:我已经检查过以前的实现,但无法弄清楚我的不同之处。遇到这类问题的大多数人都不会一eating而就,我相信我的代码应该这样做。我正在输入诸如1 2 +'Enter'的表达式(答案应该为3,并且当我将扫描仪设置为字符串1 2 +时确实为3),但是当通过命令行输入时,它们不会终止。
最佳答案
从控制台读取的扫描仪将始终具有更多数据,因为总有可能会键入更多数据。
您可以按Ctrl-D Enter键(在Linux上)或Ctrl-Z Enter键(在Windows上)来模拟控制台上的“文件结束”条件(就像您从文件或字符串中读取并到达文件末尾一样) )。
但是,也许您想一次从控制台读取一行,然后分别解析每一行? (使用Scanner
构造函数,该构造函数采用String
,这是您阅读的行)
关于java - Postfix评估程序-扫描仪问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28424623/