检查输入,看它是否在Java中是双精度的
问题描述:
我正在创建要求2个数字然后将它们相加/相乘/除法的代码。我设法让这个工作,但我遇到了一个小问题。检查输入,看它是否在Java中是双精度的
这是代码多数民众赞成窃听我的一部分:
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,我希望它一直询问输入,我该如何替换?
因为这是一个assigment,我必须不断要求一个双,如果它最好不使用该例外,那是可以接受的。但它必须指定一个号码给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);
其次,应返工你的代码,以避免通过调用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();
}
答
您可以使用所提供的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
谢谢!我在第一部分中添加了自己的代码,并修复了我所遇到的明显问题,但我不确定第二部分是如何工作的。我假设它最好不要捕捉异常呢? –
@ DenzelSimson对于什么是“更好”,没有一个通用的答案,你可以根据具体情况来决定。当你询问用户的输入时,你希望他们每时每刻都会输入错误的内容,所以你不应该捕捉异常,而是主动检查正确的输入。当您以自动生成的固定格式读取文件时,您不会指望数据不正确,并且您不能回过头来告诉用户给您一个不同的输入,以便您捕获异常,或让他们通过终止程序。 – dasblinkenlight