[英]Postfix Evaluator— Scanner Issue?
我将扫描仪用于后缀表达式评估器,但遇到了一个小问题。 当我通过命令行输入表达式时,表达式不会终止并达到无限循环。 使用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上)来模拟控制台上的“文件结束”状态(就像您从文件或字符串中读取并到达文件末尾一样) )。
但是,也许您想一次从控制台读取一行,然后分别解析每一行? (使用带String
的Scanner
构造函数,该String
是您读取的行)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.