检查输入以查看它是否是 Java 中的双精度输入
Checking input to see if its a double in Java
我正在编写代码,要求输入 2 个数字,然后将它们相加 up/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,否则它不会停止并继续询问数字。
我希望它在没有输入双精度数的情况下一直要求输入,我应该替换什么?
因为这是一个assigment,我不得不一直要求一个double,如果最好不要使用例外,那是可以接受的。但是它必须为 number1 分配一个数字,我可以稍后在程序中使用
首先,您可以通过以下方式修改代码以使其正常工作 - 您可以添加 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);
接下来,应该通过在调用 nextDouble
之前调用 hasNextDouble
来修改代码以避免捕获异常:
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();
}
如果您可以捕获异常,则可以使用 Double
class 提供的 parseDouble
函数。
实现此目的的简单代码片段是
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
我正在编写代码,要求输入 2 个数字,然后将它们相加 up/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,否则它不会停止并继续询问数字。
我希望它在没有输入双精度数的情况下一直要求输入,我应该替换什么?
因为这是一个assigment,我不得不一直要求一个double,如果最好不要使用例外,那是可以接受的。但是它必须为 number1 分配一个数字,我可以稍后在程序中使用
首先,您可以通过以下方式修改代码以使其正常工作 - 您可以添加 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);
接下来,应该通过在调用 nextDouble
之前调用 hasNextDouble
来修改代码以避免捕获异常:
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();
}
如果您可以捕获异常,则可以使用 Double
class 提供的 parseDouble
函数。
实现此目的的简单代码片段是
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