2016-03-21 88 views
-4
import java.util.Scanner; 
import java.util.InputMismatchException; 



public class divide { 
    public static void main(String[] args) { 
     Scanner kb = new Scanner (System.in); 
     int a,b; 

     try{ 
      System.out.println("enter 2 number "); 
      a = kb.nextInt(); 
      b = kb.nextInt(); 
      int c = a/b; 
      System.out.println("div="+c); 

     } 
     catch(ArithmeticException e) 
     { 
      System.out.println("please enter non 0 in deno"); 
     } 
     catch (InputMismatchException e2) 
     { 
      System.out.println("please input int only"); 
      System.exit(0); 

     } 
     int d= a+b; 
     System.out.println("sum="+d); 
    } 
} 

錯誤使用try catch導致錯誤;

divide.java:38:錯誤:變量可能尚未初始化 INT d = A + B; ^ divide.java:38:錯誤:變量b可能未被初始化 int d = a + b;

+1

編譯器不同意你的問題標題 – wero

+2

局部變量沒有初始值。您必須用某個值初始化變量。請參閱此鏈接http://www.tutorialspoint.com/java/java_variable_types.htm –

+0

這與try/catch無關。你只是不初始化你的變量,所以編譯器不能保證它們在你使用它們的時候會被初始化。 – David

回答

1

記住,順便try/catch塊的作品,有沒有保證裏面的語句會得到運行。 (因爲可能存在錯誤,導致它們剛剛跳過。)

因此,當您嘗試引用它們時,Java無法保證已定義a和b。在這種情況下,他們會一直這樣做,因爲你在catch語句中退出。

您可以通過給予它們初始默認值或將引用代碼移入try塊來解決此問題。

2

你需要你初始化變量

int a =0,b=0; 
1

如果您的try-catch失敗,不管爲什麼/如何讀取時,則變量b從未初始化... 應用程序跳轉到catch塊,並在最後你做:

int d= a+b; 
System.out.println("sum="+d); 

在這種情況下,應該是b的值?

速戰速決是:

聲明和初始化變量...

Scanner kb = new Scanner (System.in); 
int a = 0; 
int b = 0;