检查输入,看它是否在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();   
} 
+0

谢谢!我在第一部分中添加了自己的代码,并修复了我所遇到的明显问题,但我不确定第二部分是如何工作的。我假设它最好不要捕捉异常呢? –

+0

@ DenzelSimson对于什么是“更好”,没有一个通用的答案,你可以根据具体情况来决定。当你询问用户的输入时,你希望他们每时每刻都会输入错误的内容,所以你不应该捕捉异常,而是主动检查正确的输入。当您以自动生成的固定格式读取文件时,您不会指望数据不正确,并且您不能回过头来告诉用户给您一个不同的输入,以便您捕获异常,或让他们通过终止程序。 – dasblinkenlight

您可以使用所提供的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