2015-03-20 5 views
0

Использование jGRASP для Mac, я пишу код для Java-программы, которая сначала попросит пользователя ввести целое число [limitNumber], а затем вычислить нечетные числа между 1 и [ limitNumber] и отобразить сумму этих чисел и отобразить значение. После запуска первых методов программа запросит у пользователя, хочет ли он снова выполнить вычисление с новым целым числом.Попытка/ошибка при попытке вызвать предыдущий метод в Java

Чтобы продолжить, пользователю будет предложено ввести 1 для да и 0 для нет. Если введено какое-либо из этих чисел, программа работает нормально, но у меня возникли трудности с попыткой включить другой try/catch, который будет сосредоточен на 1 и 0 специально и выбросить сообщение об исключении для любого другого введенного значения.

Код выглядит следующим образом: попытка/поймать Я пытаюсь выяснить это в doAgain() Метод

import java.util.Scanner; //PRE-WRITTEN CODE FROM SCANNER CLASS 

public class sumOddsPetrantoni { 

    public static int limitNumber; 

    public static void main(String args[]) // MAIN METHOD USED TO CALL OTHER 
              // METHODS 
    { // 
     getLimitNumber(); // USER INPUTS NUMBER TO BE USED AS MAX LIMIT 
          // 
     calcSumPrint(); // COMP CALCS ODD #S BETWEEN 1 AND LIMIT NUMBER 
         // 
     doAgain(); // ASKS USER IF THEY WANT TO REPEAT THE PROCESS 
        // YES: RETURNS TO getLimitNumber METHOD 
        // NO: TERMINATES PROGRAM 
        // 
    } // END OF MAIN METHOD 

    public static void getLimitNumber() { 

     boolean done = false; 

     Scanner input = new Scanner(System.in); 

     while (done != true) { 
      try { 
       System.out.print("Let's add some odd numbers!"); 
       System.out 
         .print("\nPlease enter the limit number as an integer: "); 
       limitNumber = input.nextInt(); // METHOD USED TO INPUT INTEGER 
       done = true; 
      } // END - TRY SECTION 
      catch (Exception message) { 
       input.nextLine(); 
       System.out.println("\nDo you know what an integerer is?"); 
       System.out.println("The program threw a " + message 
         + " message at me, NOT a real integer."); 
       System.out.println("Please try again.\n"); 

      } // END - CATCH SECTION 
     } // END - WHILE LOOP 

    } // END - GET LIMIT NUMBER METHOD 

    public static void calcSumPrint() { // START - CALC SUM PRINT METOD 

     int sum = 0; 
     int ctr = 0; 
     for (ctr = 1; ctr <= limitNumber; ctr += 2) 
      // START - FOR LOOP 
      sum = sum + ctr; 
     { 
      System.out.println("\nThe sum of the odd numbers between 1 and " 
        + limitNumber + " is " + sum + "."); 
     } // END - FOR LOOP 

    } // END - CALC SUM PRINT METHOD 

    public static void doAgain() { // START - DO AGAIN METHOD 

     int ans; 
     Scanner input = new Scanner(System.in); 
     System.out 
       .println("That was aewsome! \nWant to give it another shot? \n(1 to Continue, 0 to Quit): "); 
     ans = input.nextInt(); 

     if (ans == 1) { 
      System.out.println("\nLet's rock and roll!"); 
      getLimitNumber(); 
      calcSumPrint(); 
      doAgain(); 
     } 
     if (ans == 0) { 
      System.out.println("Fine, I see how it is..."); 
     } 

    } // END - DO AGAIN METHOD 

} 
+0

JavaScript не имеет ничего общего с Java. Удаленный тег – epascarello

ответ

0
import java.util.InputMismatchException; 
import java.util.Scanner; //PRE-WRITTEN CODE FROM SCANNER CLASS 

public class sumOddsPetrantoni { 

    public static int limitNumber; 

    public static void main(String args[]) // MAIN METHOD USED TO CALL OTHER 
              // METHODS 
    { // 
     getLimitNumber(); // USER INPUTS NUMBER TO BE USED AS MAX LIMIT 
          // 
     calcSumPrint(); // COMP CALCS ODD #S BETWEEN 1 AND LIMIT NUMBER 
         // 
     doAgain(); // ASKS USER IF THEY WANT TO REPEAT THE PROCESS 
        // YES: RETURNS TO getLimitNumber METHOD 
        // NO: TERMINATES PROGRAM 
        // 
    } // END OF MAIN METHOD 

    public static void getLimitNumber() { 

     boolean done = false; 

     Scanner input = new Scanner(System.in); 

     while (done != true) { 
      try { 
       System.out.print("Let's add some odd numbers!"); 
       System.out 
         .print("\nPlease enter the limit number as an integer: "); 
       limitNumber = input.nextInt(); // METHOD USED TO INPUT INTEGER 
       done = true; 
      } // END - TRY SECTION 
      catch (Exception message) { 
       input.nextLine(); 
       System.out.println("\nDo you know what an integerer is?"); 
       System.out.println("The program threw a " + message 
         + " message at me, NOT a real integer."); 
       System.out.println("Please try again.\n"); 

      } // END - CATCH SECTION 
     } // END - WHILE LOOP 

    } // END - GET LIMIT NUMBER METHOD 

    public static void calcSumPrint() { // START - CALC SUM PRINT METOD 

     int sum = 0; 
     int ctr = 0; 
     for (ctr = 1; ctr <= limitNumber; ctr += 2) 
      // START - FOR LOOP 
      sum = sum + ctr; 
     { 
      System.out.println("\nThe sum of the odd numbers between 1 and " 
        + limitNumber + " is " + sum + "."); 
     } // END - FOR LOOP 

    } // END - CALC SUM PRINT METHOD 

    public static int getInt(){ 
     Scanner input = new Scanner(System.in); 
     int ans; 
     try { 

      ans = input.nextInt(); 
      return ans; 
     } 
     catch(Exception e){ 
      System.out.println("Try Again"); 
      ans = getInt(); 
     } 
     return ans; 
    } 
    public static void doAgain() { // START - DO AGAIN METHOD 

     int ans; 
     Scanner input = new Scanner(System.in); 
     System.out 
       .println("That was aewsome! \nWant to give it another shot? \n(1 to Continue, 0 to Quit): "); 

      ans = getInt(); 

     if (ans == 1) { 
      System.out.println("\nLet's rock and roll!"); 
      getLimitNumber(); 
      calcSumPrint(); 
      doAgain(); 
     } 
     else if (ans == 0) { 
      System.out.println("Fine, I see how it is..."); 
     }else{ 
      throw new IllegalArgumentException("Oops! that's not fair input must be 0 or 1"); 
     } 



    } // END - DO AGAIN METHOD 

} 

использование этого обработать исключение :)

+0

@NickPetrantoni попробуйте это ..! – theRoot

+0

спасибо, брат! Просто нужно было переместить инструкции «if» и «else if» в try, и теперь все работает отлично. –

+0

Добро пожаловать @NickPetrantoni checkout ** getInt() ** метод делает рекурсивный вызов до тех пор, пока не будет правильно прочитано. :) – theRoot

0

Вы можете сделать следующее на и ваш метод doAgain():

throw new IllegalArgumentException(ans + " is not allowed value. Only 0 or 1 is allowed"); 
0

Почему бы вам просто не использовать предложение else и перезапустить метод?

if(ans == 1) 
    { 
    System.out.println("\nLet's rock and roll!"); 
    getLimitNumber(); 
    calcSumPrint(); 
    doAgain(); 
    } 
else if(ans == 0) 
    { 
    System.out.println("Fine, I see how it is..."); 
    } 
else { 
    System.out.println("What you talkin bout, Willis"); 
    doAgain(); 
} 
+0

работает отлично для чисел, но бросает ту же ошибку исключения, когда набирается буква, будет ли другое значение для чисел и букв? –

+0

@NickPetrantoni бросает что? – theRoot

+0

Хотите еще раз выстрелить? (1 Продолжить, от 0 до Выход): D Исключение в потоке "основного" java.util.InputMismatchException \t на java.util.Scanner.throwFor (Scanner.java:840) \t на java.util.Scanner.next (Scanner.java:1461) \t на java.util.Scanner.nextInt (Scanner.java:2091) \t на java.util.Scanner.nextInt (Scanner.java:2050) \t at sumOddsPetrantoni.doAgain (sumOddsPetrantoni.java:76) \t at sumOddsPetrant oni.main (sumOddsPetrantoni.java:29) –