Do While 循环跳过用户输入

Do While Loop Skipping User Input

我希望它在用户输入 "Y" 或 "y" 时再次循环,并在他们输入 "N" 或 "n" 时退出。退出选项有效,但是,当他们输入 Y/y 时,它会显示第一个系统,但不允许用户选择他们希望执行的操作。相反,继续的选项会再次弹出并禁止用户做出任何选择。

代码如下:

import java.util.Scanner;

public class Calc2 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        double numOne, numTwo, ans;
        String option;

        do {

            System.out.println(
                    "For addition press '1', for subtraction press '2', for division press '3', for multiplication press '4'");
            String choice = input.nextLine();

            if (choice.contains("1")) {
                System.out.println("Enter the first number : ");
                numOne = input.nextDouble();
                System.out.println("Enter the second number : ");
                numTwo = input.nextDouble();

                ans = numOne + numTwo;
                System.out.println("The answer is: " + ans + " ya bish.");
            }

            else if (choice.contains("2")) {
                System.out.println("Enter the first number : ");
                numOne = input.nextDouble();
                System.out.println("Enter the second number : ");
                numTwo = input.nextDouble();

                ans = numOne - numTwo;
                System.out.println("The answer is: " + ans + " ya bish.");
            } else if (choice.contains("4")) {
                System.out.println("Enter the first number : ");
                numOne = input.nextDouble();
                System.out.println("Enter the second number : ");
                numTwo = input.nextDouble();

                ans = numOne * numTwo;
                System.out.println("The answer is: " + ans + " ya bish.");
            } else if (choice.contains("3")) {
                System.out.println("Enter the first number : ");
                numOne = input.nextDouble();
                System.out.println("Enter the second number : ");
                numTwo = input.nextDouble();

                ans = numOne / numTwo;
                System.out.println("The answer is: " + ans + " ya bish.");

            }
            System.out.println("Press 'Y' to continue or 'N' to quit.");

            option = input.next();
        } while (option.equals("Y") || option.equals("y"));

        if (option.equals("N") || option.equals("n")) {
            System.out.println("Thank you. ");
        }

    }
}

如果有人能帮助我,我将不胜感激。谢谢!

麻烦你看这里是在nextDouble之后使用了nextLine。在这里查看 [[=​​10=]

您的问题似乎出在 do-while 循环的开头:

System.out.println(
        "For addition press '1', for subtraction press '2', " +
         "for division press '3', for multiplication press '4'");
String choice = input.nextLine();

这是您唯一使用 nextLine 方法的地方(而不是 nextnextDouble 等)。这意味着在迭代结束时阅读选项参数后:

option = input.next();

还有一个换行符没有被扫描器读取。当您在下一次迭代中执行 nextLine() 时,它会在用户有任何机会输入内容之前读取换行符。

也将第一行更改为 input.next(),或者确保每次读取值时清除换行符(例如通过读取 nextLine 然后转换值- 这也将允许您进行输入验证)。

请更改代码中的以下行

    String choice = input.nextLine();

来自此代码

    String choice = input.next();