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
方法的地方(而不是 next
或 nextDouble
等)。这意味着在迭代结束时阅读选项参数后:
option = input.next();
还有一个换行符没有被扫描器读取。当您在下一次迭代中执行 nextLine()
时,它会在用户有任何机会输入内容之前读取换行符。
也将第一行更改为 input.next()
,或者确保每次读取值时清除换行符(例如通过读取 nextLine
然后转换值- 这也将允许您进行输入验证)。
请更改代码中的以下行
String choice = input.nextLine();
来自此代码
String choice = input.next();
我希望它在用户输入 "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
方法的地方(而不是 next
或 nextDouble
等)。这意味着在迭代结束时阅读选项参数后:
option = input.next();
还有一个换行符没有被扫描器读取。当您在下一次迭代中执行 nextLine()
时,它会在用户有任何机会输入内容之前读取换行符。
也将第一行更改为 input.next()
,或者确保每次读取值时清除换行符(例如通过读取 nextLine
然后转换值- 这也将允许您进行输入验证)。
请更改代码中的以下行
String choice = input.nextLine();
来自此代码
String choice = input.next();