2016-03-21 11 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;あなたは、道のtry/catchブロックの作品を覚えておいてください、あなたに変数

int a =0,b=0; 
+1

コンパイラは、あなたの質問のタイトル – wero

+2

ローカル変数は初期値を持たない承認しません。変数をある値で初期化する必要があります。このリンクを参照してください。http://www.tutorialspoint.com/java/java_variable_types.htm –

+0

これはtry/catchとは関係ありません。変数を初期化していないだけなので、コンパイラは、変数の使用時に初期化されることを保証することはできません。 – David

答えて

1

を初期化する必要が

2

は、その内のステートメントが実際に実行を取得するという保証はありません。

このため、Javaでは、aおよびbが参照されるときに、aおよびbが定義されていることを保証できません。この場合、catchステートメントで終了しているので、いつもそうなっています。

これを解決するには、初期値を指定するか、または参照するコードをtryブロックに移動します。

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; 
関連する問題