我正在扫描一个带有开关盒的参数文件到一个Stack
,并且它跳过了一个.nextDouble
命令的值?Java扫描器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我将它作为默认值:但它没有读取某些值。也打破似乎没有影响我的结果(?) – Gege
你确定你已经发布了真实的代码吗?当我复制并粘贴它时,我没有看到你说你看到的结果。特别是,我的堆栈如下所示:'[^,2.0, - ,*,/,^,3.0,/,^,2.0,6.0,*,/,^,8.0,+, - ,*,/,^, 2.5,3.0]',这与@ MauricePerry的观察一致,即你缺少'break'语句。 – DaveyDaveDave