2017-03-13 121 views
-2

我得到這個錯誤:「沒有報告異常IOException異常;必須捕獲或聲明拋出」在這段代碼:未報告的異常IOException異常......必須捕獲或聲明拋出

a = Double.parseDouble (kb.readLine()) ; 
b = Double.parseDouble (kb.readLine()) ; 
c = Double.parseDouble (kb.readLine()); 

這裏是代碼的其餘部分:

package quadratic.java; 


/** 
* 
* @author Painfulmono 
*/ 
import java.io.*; 
public class QuadraticDriver { 

    BufferedReader kb = new BufferedReader 
        (new InputStreamReader (System.in)); 
public static void main (String [] args){ 

    double a, b, c; 

    a = Double.parseDouble (kb.readLine()) ; 
    b = Double.parseDouble (kb.readLine()) ; 
    c = Double.parseDouble (kb.readLine()); 

    QuadraticJava q1 = new QuadraticJava (a, b, c); 

    q1.solve(); 
} 

}

我將如何得到它宣佈?

+1

您將哪種輸入發送到控制檯? –

+1

要「聲明」一個異常,您需要爲方法簽名添加一個throws子句,例如'拋出IOException'。但是你可能會使用try-catch塊:'try {/ *你的代碼* /} catch(IOException e){/ *處理異常* /}'。 – Thomas

回答

3

readLine()聲明它拋出IOException。這是一個檢查過的異常,這意味着你不能忽略它。您需要可以抓住它,例如:

try { 
    a = Double.parseDouble (kb.readLine()) ; 
} catch (IOException e) { 
    System.out.println("Can't read a"); // Or something more intellegent 
} 

或者,如果你沒有任何一個聰明的方式來處理它,你可以只通過增加此異常給調用者的簽名,例如把它向上:

public static void main (String [] args) throws IOException { 
+0

請注意,如果你從'main(String [] args)'拋出',你的應用程序可能會掛起或崩潰,因爲執行指針遵循異常處理路徑,並且你在main()之上有未定義的控制。 – geneSummons

+1

@geneSummons如果你從'main'拋出異常,程序應該終止 – Mureinik

1

在Java中,但發生異常處理時,這是一個經驗法則,你必須要麼手柄(抓)異常OR只是聲明它。

就你而言,通過將你的代碼包裝在try塊中來更好地捕捉(處理)異常。 你不應該去爲規則的申報部分,因爲當你宣佈somemethodA()拋出XYZException那麼就應該有一些其他的方法順着調用棧手柄/聲明這個XYZException。
在這裏,你不能聲明主要方法拋出IOException,因爲如果主要開始拋出異常,然後沒有什麼捕獲它,因爲main()方法坐落在調用堆棧的底部。

BufferedReader的readLine()用於您的代碼中的方法會拋出IOException。在任何IOExeption確實發生的情況下,只要使用readLine()方法,就可以使用try/catch方法讓程序正常退出。

相關問題