2016-03-05 106 views
0

我已經給出了一個名爲Fibonacci Number的程序,當程序的輸入是負整數值時,沒有輸出。我試圖通過添加用戶定義的異常和異常處理程序來修改它,以便在輸入爲負整數值時採取適當的操作。我仍然無法理解異常是如何工作的以及如何修改此程序。添加用戶定義的異常和異常處理程序

public class FibonacciNumber { 
    public static long fib(int n) { 
     if (n <= 1) return n; 
     else return fib(n-1) + fib(n-2); 
    } 

    public static void main(String[] args) { 
     int N = Integer.parseInt(args[0]); 
     System.out.println(N); 
     for (int i = 1; i <= N; i++) 
      System.out.println(i + ": " + fib(i)); 
    } 

} 
+0

如果該值爲負值,您希望發生什麼? – Atuos

+0

遵循斐波納契模式 – LearningToProgram

+0

你是什麼意思「遵循斐波納契模式」?如果用戶輸入負數? – Atuos

回答

0

因爲你是一個新手到Java.This是你可以如何修改程序計算斐波那契數我將在外行的話解釋這一點。首先你說過你想用異常來控制程序的行爲,讓用戶知道出了什麼問題。當你拋出一個異常時,這個異常將被傳播給調用者層次結構,直到它被一個顯式的異常處理程序捕獲,或者如果沒有找到處理程序來捕獲異常處理程序,程序將簡單地退出。

在這種情況下,您希望拋出一個錯誤,以便下面的應用程序代碼在被異常處理程序捕獲之前不會被執行。

if (N < 0) { 
    throw new IllegalArgumentException("Negative numbers are not allowed"); 
} 

這將拋出一個IllegalArgumentException與自定義消息,你可以顯示給用戶,如果你想。

現在正如我所說,這個異常必須在異常處理程序中捕獲。既然你拋出這個異常,緊接着的代碼將不會被執行。換句話說,如果將上面的代碼段放在下面的代碼上面,下面的代碼將不會被執行。

System.out.println(N); 
for (int i = 1; i <= N; i++) 
    System.out.println(i + ": " + fib(i)); 

現在你需要一個異常處理程序,否則你的程序將提前退出。 這是你如何附上一個try catch處理程序,

int N = Integer.parseInt(args[0]); 
try { 
    if (N < 0) { 
    throw new IllegalArgumentException("Negative numbers are not allowed"); 
    } 
    System.out.println(N); 
    for (int i = 1; i <= N; i++) { 
     System.out.println(i + ": " + fib(i)); 
    } 
} catch (IllegalArgumentException e) { 
    System.out.println(e.getMessage()); 
} 

有了這個地方,當用戶輸入一個負數,程序將顯示在我們創建異常的消息。當輸入是負數時,您可能想要做其他事情,通過引發異常,但您應該能夠理解如何完成。您可能還想使用自定義異常,而不是Java平臺提供的標準異常。在那裏有很多tutorials來學習自定義的異常處理。

+0

非常感謝你,是的,當談到編程時我有點新手,對此感到抱歉。 – LearningToProgram