简体   繁体   English

Java while循环无法按预期工作

[英]Java while loop doesn't work as intended

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()

there's my main method. 这是我的主要方法。 As seen in the code, when X has been entered the code should stop running straight away, however its actual output is 从代码中可以看出,输入X后,代码应立即停止运行,但是实际输出为

...
Your choice > X
Enter the number of 

May the odds be ever metric!

there is a "enter the number of " before the actualy intended output and I see no reason for it to be there. 在实际的预期输出之前有一个“输入数字”,我认为没有理由在其中。 Can anyone help fix this? 谁能帮忙解决此问题?

That line occurs every time you go through the loop. 每次循环时都会出现该行。 One way to fix this is to make that call in each case statement except for X. 解决此问题的一种方法是在每个case语句(X除外)中进行该调用。

In your code 在你的代码中

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

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

so you are basically printing this before switch, so the output is expected, you may want to call inside cases rather outside switch, when its x, just quit. 因此,您基本上是在切换之前打印此内容,因此可以预期输出,您可能希望在内部实例而不是外部切换中调用它,当它的x退出时。

You are doing System.out.print("Enter the number of "); 您正在做System.out.print("Enter the number of "); in every case .So thats why its printing when you entered X so try to put System.out.print("Enter the number of "); 在每种情况下。所以这就是为什么当您输入X时要进行打印,因此请尝试放入System.out.print("Enter the number of "); inside if(check if string entered is not X) like below if(check if string entered is not X)内部if(check if string entered is not X)如下

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

OR 要么

put System.out.print("Enter the number of "); System.out.print("Enter the number of "); inside each switch case where you want it as pointed by @Tanmoy 在每个开关盒内,如@Tanmoy所指

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM