Java while循环不能按预期工作

时间:2015-01-29 17:55:06

标签: java while-loop

public static void main(String[] args) {
    boolean run = true;
    while (run) {
        Scanner kb = new Scanner(System.in);
        System.out.println("Welcome to MetricMan - the best converter in town!");
        System.out.println("Choose and option:");
        System.out.println("A) Fahrenheit to Celsius");
        System.out.println("B) Celcius to Fahrenheit");
        System.out.println("C) Miles to Kilometers");
        System.out.println("D) Kilometers to Miles");
        System.out.println("E) Inches to Centimeters");
        System.out.println("F) Centimeters to Inches");
        System.out.println("X) Quit the program");

        System.out.print("Your choice > ");
        String choice = kb.nextLine();

        double output; int input;
        System.out.print("Enter the number of ");
        switch (choice) { // do actions according to the user's choice. convert and display
        case "A":
            System.out.print("Farenheit > ");
            input = kb.nextInt();
            output = convertFtoC(input);
            System.out.println(input+" farenheit is "+output+" celsius");
            break;
        case "B":
            System.out.print("Celsius > ");
            input = kb.nextInt();
            output = convertCtoF(input);
            System.out.println(input+" celsius is "+output+" farenheit");
            break;
        case "C":
            System.out.print("miles > ");
            input = kb.nextInt();
            output = convertMtoK(input);
            System.out.println(input+" miles is "+output+" kilometres");
            break;
        case "D":
            System.out.print("kilometres > ");
            input = kb.nextInt();
            output = convertKtoM(input);
            System.out.println(input+" kilometres is "+output+" miles");
            break;
        case "E":
            System.out.print("inches > ");
            input = kb.nextInt();
            output = convertItoC(input);
            System.out.println(input+" inches is "+output+" centimeters");
            break;
        case "F":
            System.out.print("centimeters > ");
            input = kb.nextInt();
            output = convertCtoI(input);
            System.out.println(input+" centimeters is "+output+" inches");
            break;
        case "X":
            System.out.println(); System.out.println();
            System.out.println("May the odds be ever metric!");
            run = false;
            break;
        }
        System.out.println();
        kb.nextLine();
    }
} // end of main()

这是我的主要方法。如代码所示,当输入X时,代码应该立即停止运行,但实际输出为

...
Your choice > X
Enter the number of 

May the odds be ever metric!

有一个"输入"在实际预期输出之前,我认为没有理由在那里。任何人都可以帮忙解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

每次进行循环时都会出现该行。解决此问题的一种方法是在除X之外的每个case语句中进行调用。

答案 1 :(得分:1)

在您的代码中

    System.out.print("Enter the number of ");

    switch (choice) { // do actions according to the user's choice. convert and display

所以你基本上是在切换之前打印这个,所以输出是预期的,你可能想调用内部情况而不是外部开关,当它的x,只是退出。

答案 2 :(得分:1)

在每种情况下,您都在执行System.out.print("Enter the number of ");。这就是为什么在您输入X时打印的原因,请尝试将System.out.print("Enter the number of ");放在if(check if string entered is not X)内,如下所示

if(!choice.equals("X")){
System.out.print("Enter the number of ");
}

System.out.print("Enter the number of ");放在@Tanmoy

所指向的每个开关案例中