用while循环重新运行程序后,异常方法不工作。

问题描述 投票:0回答:1

我在处理一个练习的异常,运行得很好,直到我第一次运行程序后输入了一个无效的数字(要试),这是在第一次运行后要求用不同的值重新运行时,如果我正好输入了无效值,它就不会抛出异常,我不知道为什么?是我不知道还是我的代码有问题?谢谢你

//program  ReverseNumbers.java
//This program reverses the digits of each number in an array.
import java.util.Scanner;
public class ReverseNumbers{
   public static void main(String[] args){

     Scanner input = new Scanner(System.in); 
     int[] numbers  = new int[5]; //create array numbers size 5
     boolean continueInput = true; //controls loop for input
     String another = "y";

      while(another.equalsIgnoreCase("Y")){ //loop to re-run program

         do{
            System.out.print("\nEnter 5 positive integers: "); //prompt the user to enter 5 integers

         //try block 
            try{
               for(int i = 0; i < numbers.length ; i++)  //initialize the array
                  numbers[i] = input.nextInt();

               checkInput(numbers); //handler method

               continueInput = false;

            }

            //catch block
            catch(IllegalArgumentException ex){
               System.out.print("\nInvalid input: ");
               //input.nextLine();
            }


         }while(continueInput);


      //outputs

         System.out.print("\nEntered numbers:\t\t");
         for(int e: numbers)
            System.out.print(e + " ");

         System.out.print("\nReversed numbers:\t\t");
         reverse(numbers); 

      //output re-run program
         System.out.println();
         System.out.print("\nRe-run program with different values, Y/N? ");
         another = input.next();


      }

   }

  //Exception method 
   public static void checkInput(int[] array) throws IllegalArgumentException {
      for(int i = 0; i < array.length; i++){
         if(array[i]<0)
            throw new IllegalArgumentException();
      }    


   }


//method reverse. 
   public static void reverse(int[] array) {

   //reverse order of element within the array
      int i, k, t;
      int n = array.length;
      for (i = 0; i < n / 2; i++) { 
         t = array[i]; 
         array[i] = array[n - i - 1]; 
         array[n - i - 1] = t; 
      } 

      reverse(array, array.length-1);
   }

//helper method   
   public static void reverse(int[] array, int n){  //reverse the order of the number for each element in the array
                                                    // n, number of elements in the array  
      if(n>=0){  
         int Element = array[n]; //element n in array 
         int NewElement = -1;
         int Digit = -1;
         String s = "";

         if(Element<10)
            s = Element + "";

         while(Element >= 10){ //loop up to element is reduced to one digit number

            Digit = Element%10;

            s = s + "" +  Digit; //save the digits

            NewElement = Element/10;

            if(NewElement < 10) //when NewElement has 1 digit left
               s =  s + "" + NewElement;

            Element = NewElement; 
         }     

         System.out.print(s + " "); //print digit

         reverse(array, n-1); //recursive call 
      }


   }
}
java exception while-loop workflow
1个回答
0
投票

这可以通过简单的插入 continueInput = true 在你的外层while循环中。没有这个 continueInput 在你第一次输入有效的输入后,将始终为false,而你的do-while循环将在一次迭代后退出。

但是,我不建议自己抛出异常,你可能应该处理Scanner的InputMismatchException。另外,你的逆向方法也是不必要的复杂。这是我得到的代码。

import java.util.Scanner;

public class ReverseNumbers {

  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int[] numbers = new int[5]; //create array numbers size 5
    String another = "y";

    while (another.equalsIgnoreCase("Y")) { //loop to re-run program
      boolean continueInput = true; //controls loop for input
      outer: do {

          System.out.print("\nEnter " + numbers.length + " positive integers: ");

          try {
              for (int i = 0; i < numbers.length; i++) {
                  int num = input.nextInt();
                  if (num < 0) {
                      System.out.print("Invalid input, found a negative integer " + num)
                      continue outer;
                  } else {
                      numbers[i] = num;
                  }
              }
              continueInput = false;
          }
          //handle bad inputs that aren't digits
          catch (InputMismatchException ex) {
              System.out.print("\nInvalid input, please enter integers");
          }
      } while (continueInput); //outputs

      System.out.print("\nEntered numbers:\t\t");
      for (int e: numbers) System.out.print(e + " ");

      System.out.print("\nReversed numbers:\t\t");
      for (int i = numbers.length - 1; i >= 0; i--) {
          System.out.print(numbers[i] + (i == 0 ? "\n" : " "));
      }

      //output re-run program
      System.out.println();
      System.out.print("\nRe-run program with different values, Y/N? ");
      another = input.next();
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.