4

「a」の値を出力しようとすると、エラーが表示されるのはなぜですか? 例外がエラーになったのはなぜですか?

class Ankit1
{
    public static void main(String args[])
    {
        float d,a;
        try
        {
            d=0;
            a=44/d;
            System.out.print("It's not gonna print: "+a); // if exception doesn't occur then it will print and it will go on to the catch block
        }
        catch (ArithmeticException e)
        {
            System.out.println("a:" + a); // why is this an error??
        }
    }
}
4

5 に答える 5

6

エラーが表示される場合

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The local variable a may not have been initialized

    at your.package.Ankit1.main(Ankit1.java:18)

明確に述べているThe local variable a may not have been initialized

変数が初期化されていないため、このエラーが発生してaいます。

エラーメッセージを印刷したい場合は、印刷してみてください...e.getMessage()またはp.printStackTrace()完全なスタックトレースを取得してください。

この単純な初期化aを次のような値で修正するには...

float a = 0;
于 2012-08-26T13:53:25.153 に答える
3

a値はありません。で例外が発生したため44/daおそらく値がないとしてのステートメント。

Ankit1.java:14: variable a might not have been initialized
            System.out.println("Print hoga"+a);//why error come??

変数 a が初期化されていないためです。

また、この 44/d ステートメントに対して ArithmeticException がスローされることはありません。浮動小数点演算があるため、0 除算例外が発生せず、代わりに無限大が結果になります。
詳しくはこちら

于 2012-08-26T13:54:17.653 に答える
3

「「a」の値を出力しようとすると、エラーが表示されるのはなぜですか?

ゼロで除算すると、 a が初期化される前に例外がスローされるためです。

エラーを出力するには、例外メッセージまたはスタックトレース全体を出力できます。

catch(ArithmeticException e)
{
   System.out.println(e.getMessage());
   e.printStackTrace();
}
于 2012-08-26T13:56:41.393 に答える
2

a初期化されませんでしたおよび
のデフォルト値を初期化しますda

float d = 0.0f;  
float a = 0.0f;  

またはFloat代わりに使用float

Float a = null;  
于 2012-08-26T13:52:18.503 に答える
1

定義float d,a;しますが、それらを初期化していません。後で使用しない場合、それらを使用する前にコンパイル時エラーが発生します。
あなたの中tryで:
d=0;
a=44/d;

しかし、それらを a で初期化し、コンパイラtry内でそれらにアクセスするため、初期化されていないと文句を言います。に置き換えた場合も、同じエラーが発生します。 これを解決するには、次のようにします。 catchad

float d = 0,a = 0;

常にローカル変数を初期化する

于 2012-08-26T14:08:29.977 に答える