5

次の方法を検討してください。

void a ()
{
    int x;
    boolean b = false;
    if (Math.random() < 0.5)
    {
        x = 0;
        b = true;
    }
    if (b)
        x++;
}

x++「ローカル変数が初期化されていない可能性があります」というエラーが表示されます。明らかに、x が初期化されていない状態で使用されることは決してありません。x を初期化する以外に警告を抑制する方法はありますか? ありがとう。

4

3 に答える 3

6

いいえ、Java が変数が初期化されているかどうかを判断するためにプログラムの考えられるすべてのコード パスを調べる方法はないため、安全なルートを使用して警告します。

いいえ、これを取り除くには変数を初期化する必要があります。

于 2012-09-30T13:01:08.767 に答える
2

ここに一つ :

void a () {
    if (Math.random() < 0.5) {
        int x = 1;
    }
}

コンパイラは、アルゴリズムの考案とテストに責任を負いません。あなたは。

しかし、より実用的なユースケースを提案する必要があるかもしれません。あなたの例は、あなたの目標が何であるかを実際には示していません。

于 2012-09-30T13:00:23.140 に答える
1

単に使用しないのはなぜですか

void a ()
{
    int x;
    boolean b = false;
    if (Math.random() < 0.5)
    {
        x = 0;
        b = true;
        x++;
    }
    if (b) {
        //do something else which does not use x
    }
}

コードでは、なぜ最初の if ブロックの外で x を使用したいのですか。関連するすべてのロジックxは、最初の if ブロックでのみ実装できます。x を使用するために他の if ブロックを使用する必要があるケースは見当たりません。 .

EDIT:または次も使用できます:

void a ()
{
    int x;
    boolean b = (Math.random() < 0.5);
    if (b) {
         x=1
        //do something 
    }
}
于 2012-09-30T13:12:31.233 に答える