Java开关始终运行默认代码

时间:2015-04-13 21:18:41

标签: java string switch-statement case default

我是java的初学者,我一直在努力做到这一点。它应该是一个简单的计算器。我知道可能有更好/更有效的方法来做到这一点,但这不是我想要的。当使用switch选择要运行的操作时,我遇到了一个小问题。基本上,每次运行代码时都会选择正确的代码来运行(如果输入的String是" +",它将添加double s) ,以后似乎总是运行default代码(打印"命令无法识别。")。如果我删除了default代码,它可以完美地工作(当然,这样,如果用户输入一个未知命令就会出错)并且我可以很容易地做到这一点,但我真正想要的是一种方法一个默认代码,并知道它为什么不以这种方式工作。 请帮忙。 感谢。

import java.util.Scanner;
public class App {
public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    double v1 = scan.nextDouble();
    double v2;
    double v3;
    scan.nextLine();
    while(1<2){
    String op = scan.nextLine();
    switch(op){
    case "+":
        v2 = scan.nextDouble();
        v1 = v2 + v1;
        System.out.println("="+v1);
        break;
    case "-":
        v2 = scan.nextDouble();
        v1 = v2 - v1;
        System.out.println("="+v1);
        break;
    case "*":
        v2 = scan.nextDouble();
        v1 = v2 * v1;
        System.out.println("="+v1);
        break;
    case "/":
        v2 = scan.nextDouble();
        v1 = v1 / v2;
        System.out.println("="+v1);
        break;
    case "^":
        v2 = scan.nextDouble();
        v3 = v1;
        for(int i = 1;i<v2;i++){
            v1 = v1*v3;
        }
        System.out.println("="+v1);
        break;
    case "%":
        v2 = scan.nextDouble();
        v1 = (v1/100)*v2;
        System.out.println("="+v1);
        break; 
    default:
        System.out.println("Command not recognized.");
            }
        }
    } 
}

输出是这样的:

5
*
5
=25.0
Command not recognized.

2 个答案:

答案 0 :(得分:2)

您应该在此行中使用scan.next()代替scan.nextLine()

String op = scan.next();

执行scan.nextLine()时会消耗新的换行符,因此op设置为&#34;新行&#34};并且switch以默认行为结束。

使用scan.next(),您将能够执行此操作:

5
*
5
=25.0
*
2
=50.0
/
25
=2.0

答案 1 :(得分:1)

break;

之后添加System.out.println("Command not recognized.");

修复它只是打破循环。

default:
            System.out.println("Command not recognized.");
            break;
                }
        break;
            }

由于你的while循环永远不会结束,它会继续重新运行代码。