if 在 while 循环中嵌套

Nested if in while loop

我在执行 while 循环时遇到了一些问题。 if 语句按预期工作,但从扫描器返回的 char 值没有进入我的 while 循环。有人知道我做错了什么或对我的程序有更好的解决方案吗?

package classWork;
import java.util.Scanner;

public class project_2 {
    public static void main(String[] args){

        Scanner input = new Scanner(System.in);
        int choice = 0;
        double celsius, fahrenheit, inches, centimeters;
        char doAgain = 'y';

        while (doAgain == 'y' || doAgain == 'Y')
        {

        System.out.print(" Main Menu \n 1. Celsius to Fahrenheit \n 2. Inches to Centimeters \n"
                + "Please select either 1 or 2 \nThen press enter to continue");
        choice = input.nextInt();

        if (choice == 1)
        {
            System.out.println("This program will convert a celsius value into a fahrenheit one. \n");

            System.out.println("Please enter the tempature for conversion: ");
            celsius = input.nextInt();

            fahrenheit = 1.8 * celsius + 32.0;

            System.out.println(celsius + " degree(s) in celcius" + " is " + fahrenheit + 
                    " in fahrenheit. \n");

            System.out.println("Do you want to continue?\n: " +
                       "enter a \'y \' for another round\n " +
                      " enter a\'n\'   to end the program\n");

            doAgain = input.next().charAt(0);

            input.close();
            return;
        }

        if (choice == 2)
        {
            System.out.println("This program will convert inches to centimeters. \n");


            System.out.println("Please enter the length for conversion: ");
            inches = input.nextInt();

            centimeters = 2.54 * inches;

            System.out.println(inches + " inches is " + centimeters + " centimeters. \n");

            System.out.println("Do you want to continue?\n: " +
                       "enter a \'y \' for another round\n " +
                      " enter a\'n\'   to end the program\n");

            doAgain = input.next().charAt(0);

            input.close();
            return;
        }

        else
        {
            System.out.println("That is not a valid option. Please restart and try again");
            input.close();
            }
        }
    }
}

您需要删除 return ,它会完成主线程的执行

你的程序实际上有3个问题

1。不要调用return继续迭代

在 2 个 if 块的末尾,您调用 return 这会使您的应用程序退出 main 方法,因此退出您的应用程序实际上是您当前的问题。

所以只需删除它们或使用 continue 代替。

2。不要打电话close继续阅读

在 2 个 if 块的末尾,您调用 input.close() 关闭扫描器,这样您以后将无法阅读任何内容而没有得到 IllegalStateException

所以简单地删除它们。

3。第二个 if 应该是 else if

您的代码应该是:

if (choice == 1)
{
    ...
}
else if (choice == 2)
{
    ...
}
else
{
    ...
}

否则,如果您的第一选择是 1,那么您键入 y 进行迭代,您的应用程序将进入 else,因为 choice != 2close 扫描仪,因为它被错误地视为无效选项。