我正在创建代码,要求输入2个数字,然后将它们加起来/ multipies / divides。我设法让这个工作,但我遇到了一个小问题。
这是困扰我的代码的一部分:
double number1 = 0;
do {
try {
System.out.print("First number: ");
number1 = input.nextDouble();
} catch (InputMismatchException e) {
System.out.print("This is not a number. ");
}
input.nextLine();
} while (number1 == 0);
它适用于我打算做的事情,这是要求一个数字。如果用户没有输入数字,它会捕获异常并阻止它退出。
while (number1 == 0);
这是我用来测试try和catch是否按预期工作,但当然意味着number1不能为0或者它不会停止并继续要求输入数字。
我希望它只要输入一个double就继续询问输入,我该替换什么?
因为这是一个分配,我必须继续要求 double ,如果最好不要使用异常,那是可以接受的。但它必须为number1分配一个号码,我稍后可以在程序中使用
答案 0 :(得分:1)
首先,以下是如何修改代码以使其正常工作 - 您可以添加boolean
标志以指示循环已成功:
double number1 = 0;
boolean success;
do {
success = true;
try {
System.out.print("First number: ");
number1 = input.nextDouble();
} catch (InputMismatchException e) {
System.out.print("This is not a number. ");
success = false;
}
input.nextLine();
} while (!success);
接下来,应该重新编写代码以避免在调用hasNextDouble
之前调用nextDouble
来捕获异常:
double number1 = 0;
while(true) {
System.out.print("First number: ");
if (input.hasNextDouble()) {
number1 = input.nextDouble(); // This will not throw an exception
break;
}
System.out.print("This is not a number. ");
input.nextLine();
}
答案 1 :(得分:0)
如果您可以捕获异常,则可以使用parseDouble
类提供的Double
函数。
实现此目的的简单代码片段是
public class AcceptDouble {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double number1 = 0;
while(true){
try {
number1 = Double.parseDouble(sc.next());
System.out.println("Got: " + number1);
// DO WHAT YOU WANT WITH NUMBER1
}
catch (NumberFormatException timeToBreak) {
System.out.println("Time to break");
break;
}
}
}
}
只要输入有效数字,就会继续接受新输入。附加参考的示例输出片段
34
Got: 34.0
23
Got: 23.0
12
Got: 12.0
end
Time to break