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

它抛出“java.lang.StackOverflowError”而不是“ArrayIndexOutOfBoundsException”。

更好的方法是在

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 回答