【发布时间】:2018-03-07 09:20:10
【问题描述】:
我正在将带有 switch case 的参数文件扫描到 Stack 并使用 .nextDouble 命令跳过值?
这是我的代码片段:
while (stackScanner.hasNextLine()) {
switch(stackScanner.next()) {
case"+": {
operator= new operationNode("+");
stack.push(operator);}
case"-":{
operator= new operationNode("-");
stack.push(operator);}
case"*":{
operator= new operationNode("*");
stack.push(operator);}
case"/":{
operator= new operationNode("/");
stack.push(operator);}
case"^":{
operator= new operationNode("^");
stack.push(operator);}
while(stackScanner.hasNextDouble()) {
stack.push(new numberNode(stackScanner.nextDouble()));
}
}
问题出在最后一行,其中参数文件包含以下内容:^ 2 - 3 / 2 6 * 8 + 2.5 3
然而,扫描器只收集:^ 2 - 3 / 6 * 8 + 3。
所以它跳过了第一个成对出现的数字(2 和 2.5)。
问题是,当我在 while 循环的末尾添加 stackScanner.next(); 时,它保存的唯一数字是那些值 2 和 2.5?
【问题讨论】:
-
您是否注意到您的案例中没有中断,并且您的 while 循环位于 switch 语句中?
-
@MauricePerry 我把它作为默认值:但它没有读取某些值。休息似乎也不会影响我的结果(?)
-
你确定你已经发布了真实的代码吗?当我复制并粘贴它时,我没有看到您所说的结果。特别是,我的堆栈看起来像:
[^, 2.0, -, *, /, ^, 3.0, /, ^, 2.0, 6.0, *, /, ^, 8.0, +, -, *, /, ^, 2.5, 3.0],这与@MauricePerry 的观察一致,即您缺少break语句。 -
@DaveyDaveDave 哦,我完全意识到我做错了什么——没有正确读取堆栈。感谢您的帮助
标签: java switch-statement arguments java.util.scanner next