2017-04-13 154 views
0

所以我是一種新的捕捉錯誤等。無論如何,該程序應該要求用戶輸入2個整數,然後將它們加在一起。很簡單,但如果其中任何一個數字都不是整數,則會引發錯誤。目前,如果我輸入2個整數,而不是添加它們,它只是重新啓動getAnswer()方法並再次輸出它們。此外,如果您輸入多個錯誤,它將簡單地退出。Java異常處理

package javaapplication1; 

import java.util.InputMismatchException; 
import java.util.Scanner; 


public class JavaApplication1 { 

    public static void main(String[] args) { 
    Intro(); 
    System.out.println("Your answer: "+getAnswer()); 
    } 
    private static void Intro() { 
    System.out.println("Hello this program adds 2 integers together and catches errors."); 
    getAnswer(); 
    } 
    private static int getAnswer() throws InputMismatchException { 
    Scanner scanner = new Scanner(System.in); 
    try { 
     System.out.println("Please input a number"); 
     int num1 = scanner.nextInt(); 
     System.out.println("Please input a second number"); 
     int num2 = scanner.nextInt(); 
     return num1+ num2; 
    } catch (InputMismatchException exp) { 
     System.out.println("Exception thrown"); 
     return 0; 
    } 
    } 
} 
+0

您是否曾嘗試在'getAnswer()'方法中加入調試點並逐步完成調試?此外,如果您遇到特殊類型的異常,方法簽名不再需要說'拋出異常'。 –

+2

「目前,如果我輸入2個整數,而不是添加它們,它只是重新啓動getAnswer()方法並再次輸出」 - 是的,因爲您的程序包含兩個對'getAnswer'的調用,並且將第一個結果丟棄。 – user2357112

+0

你不想讓它退出? – Henry

回答

3

要調用getAnswer();共兩次,所以你只要從Intro()方法,就能解決問題刪除通話。

private static void Intro() { 
     System.out.println("Hello this program adds 2 
      integers together and catches errors."); 
} 

如果您想提示用戶再次重新輸入輸入,你可以調用catchgetAnswer()如下圖所示:

private static int getAnswer() { 
     Scanner scanner = new Scanner(System.in); 
     try { 
     System.out.println("Please input a number"); 
     int num1 = scanner.nextInt(); 
     System.out.println("Please input a second number"); 
     int num2 = scanner.nextInt(); 
     return num1+ num2; 
     } catch (InputMismatchException exp) { 
      System.out.println("Exception thrown, please reenter values:"); 
      getAnswer(); 
     } 
     return 0; 
} 

還有一點是,而不是捕獲InputMismatchException,另一種更好的方法是將輸入讀爲字符串並驗證它們僅包含如下的數值:

private static int getAnswer() { 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("Please input a number"); 
     String num1 = scanner.nextLine(); 
     System.out.println("Please input a second number"); 
     String num2 = scanner.nextLine(); 
     if(num1.matches("[0-9]+") && num2.matches("[0-9]+")) { 
      return Integer.parseInt(num1)+ Integer.parseInt(num2); 
     } else { 
      System.out.println(" Your inputs contain Invalid characters"); 
      getAnswer(); 
     } 
     return 0; 
    } 
+1

如果他想讓它繼續運行並再次詢問,則在'catch'塊下,他應該將返回值更改爲'return getAnswer();'。 – Henry

+0

啊,解決了這個問題,但是現在當程序捕獲異常時它就退出了。 – Cory

+0

確實不應該使用捕捉異常作爲詢問正確輸入的控件行爲。應該讀入兩個值並驗證它們是整數,然後繼續輸出不正確的輸入並重試。 –