0

私は誰かに私の仕事をするように頼んでいません。私はこのミスマッチを解決するために少し助けが必要です。これは私のプログラムです:

import java.util.InputMismatchException;
import java.util.Scanner;
class FibonacciNumbers {

    FibonacciNumbers()          //default constructor
    {
    }

    Scanner in = new Scanner(System.in);

    public int fOf(int n)
    {

        if (n == 0)                        //the base case
        {

            return 0;

        }
        else if (n==1)
        {

            return 1;
        }

        else 
        {

           return fOf(n-1)+fOf(n-2); 
        }
        }

 public static void main(String[] args)
    {
       FibonacciNumbers fNumbers = new FibonacciNumbers();    //creates new object

        Scanner in = new Scanner(System.in);
        String userInput;
         int n = 0;
        boolean IsRepeat = true ;  
        boolean isQuit; 
        boolean checkException = false;

     isQuit = false;  

     while (!isQuit) 
     {


try {

    {

        System.out.print("Enter the number you want to convert to Fibanocci('q' to quit): ");


        n = in.nextInt();
        System.out.print("The Fibanocci number for "+n+" is: ");
        n = fNumbers.fOf(n);
        System.out.println(n);

        System.out.print("Do you want to run again? Press 'N' for No or anything else to continue: ");  

        userInput = in.next();  

       if(userInput.equalsIgnoreCase("N") )
          {  
              isQuit = true;
              System.out.println("Good-bye!"); 
           }  
        else 

         {  
        IsRepeat = true; 
         }
       }
    }

catch(InputMismatchException ex) {  
          userInput = in.nextLine();  

           if  ((userInput.charAt(0) == 'q') || (userInput.charAt(0) == 'Q') )  
             {  

                  isQuit = true; 
                  System.out.println("Good-bye!");  

             }  

           else {  
                 checkException = true;
                 IsRepeat = true;
                 System.out.println("Invalid entry, Try again!");
              }    
    }

    catch (ArrayIndexOutOfBoundsException a)
         {
            n = in.nextInt();
             if  (n<0 || n>46) 
                        {
                            System.out.println("Invalid entry! Please enter an integer that is greater than 0 but less than 46 :");
                            checkException = false;//sets boolean value to false, continues the loop


                        }
                      else
                          {
                            IsRepeat = true;   
                          }
    }
    }
}
}

私はすべてを機能させるためにすべてを実行しましたが、この部分では、実行したいとおりに実行されません。

catch (ArrayIndexOutOfBoundsException a)
         {
            n = in.nextInt();
             if  (n<0 || n>46) 
                        {
                            System.out.println("Invalid entry! Please enter an integer that is greater than 0 but less than 46 :");
                            checkException = false;//sets boolean value to false, continues the loop


                        }
                      else
                          {
                            IsRepeat = true;   
                          }
    }

ユーザーが46より高いか0より低い入力をした場合に実行すると、別の入力を要求しますが、それは単に計算を行っているだけです。私がプログラムを書いたようにそれはしません。

4

1 に答える 1

1

「ArrayIndexOutOfBoundsException」の代わりに「java.lang.StackOverflowError」をスローします。

より良い方法は、で無効な入力をキャッチすることです

System.out.print("Enter the number you want to convert to Fibanocci('q' to quit): ");
n = in.nextInt();

「n=in.nextInt();」を設定できます do --while-ループに、

お気に入り:

do {
    ask for number
} while (check if number is correct);
于 2013-02-24T19:47:17.947 に答える