Java - 尝试/捕获无限重复

时间:2014-02-26 16:03:58

标签: java try-catch

要求:

接受10个数字,将它们输入到数组中,然后调用一个方法来计算并返回最小的数字。该程序被认为是防错的,因此当用户输入无效条目时,它会通知用户并重新提交。我正在尝试使用try catch但是当输入无效条目时,即字符时,扫描程序将不会重新提示。

有什么想法吗?

尝试:

//Variables
double [] doubleArray = new double[10];
Scanner input = new Scanner(System.in);

//Prompt
System.out.println("This program will prompt for 10 numbers and display the smallest of the group");

//Get values
for (int i = 0; i < doubleArray.length; i++) {
    try {
        System.out.println("Please enter entry "+ (i+1));
        doubleArray[i] = input.nextDouble();        

    } catch (InputMismatchException e) {
        // TODO: handle exception
        System.out.println("Please enter a rational number");
        i--;
    }
}

//Invoke method and display result
System.out.println("The smallest value is: "+index(doubleArray));

4 个答案:

答案 0 :(得分:2)

我没有看到对input.nextLine()的任何调用,这意味着没有任何东西消耗用户输入的\ n。 scan.nextLine使用here就是一个很好的例子。如果你在catch块中添加一个调用,你应该全部设置。

答案 1 :(得分:1)

尝试在捕获中调用input.nextLine();。然后,\n将从输入中获取,您可以输入下一个新数字。

for(int i = 0; i < doubleArray.length; ++i) {
    try {
        doubleArray[i] = input.nextDouble();
    } catch(Exception e) {
        input.nextLine();
        --i;
    }
}

答案 2 :(得分:0)

尝试类似的东西(并确保使用整行,除非你想在同一行上输入多个数字

   boolean validEntry = false;
   System.out.println("Enter a rational number: ");
   while (!validEnry) {
     try {
          double value = input.nextDouble();
          validEntry = true;
          doubleArray[i] = value;
     } catch (Exception e) {
         System.out.println("Entry invalid, please enter a rational number");
     }
   }

   ...

答案 3 :(得分:0)

您必须丢弃错误输入的数据,在input.nextLine()块中添加catch