0

だから、これは私がこれまでに持っているものであり、プログラムが私が望むように応答しない理由がわかりません. 「avg2 が初期化されていない可能性があります」というメッセージが表示され続けます。何か案は??

if (a < b && a < c) {
    System.out.println("The lowest score was: " + a);
    System.out.println("The average without the lowest score is: " + ((b + c) / 2));
    avg2 = ((b + c) / 2);
}

if (b < a && b < c) {
    System.out.println("The lowest score was: " + b);
    System.out.println("The average without the lowest score is: " + ((a + c) / 2));
    avg2 = ((a + c) / 2);
}

if (c < a && c < b) {
    System.out.println("The lowest score was: " + c);
    System.out.println("The average without the lowest score is: " + ((a + b) / 2));
    avg2 = ((a + b) / 2);
}
4

5 に答える 5

7

avg2 を次のように宣言したとしdouble avg2;ます。初期値なし。問題は、a == b == cたとえば、 if 条件のどれも真でavg2はなく、初期化されないことです。

  • 解決策 1: avg2 を初期化します。double avg2 = 0;
  • 解決策 2 (より良い): 一連の if の代わりに、if / else if / else 構文を使用します。else がある場合、コンパイラは avg2 が常に初期化されることを確認します。
于 2013-02-06T01:50:42.413 に答える
0

そのコードは私の目をとても傷つけたので、私はこの答えを投稿する義務があると感じました:)

double lowest = Math.min(Math.min(a, b), c);
double avg2 = (a + b + c - lowest) / 2;
System.out.println("The lowest score was: " + lowest);
System.out.println("The average without the lowest score is: " + avg2);

15行ではなく4行だけで、変数が初期化されているため、このコードはその警告を生成しません。

おそらく警告は、変数がifステートメント内で初期化されているためですが、最終的には発生しない可能性があります...

于 2013-02-06T02:30:47.457 に答える
0

if問題は、ステートメント条件のいずれも満たされないコードを経由する可能性のあるルートがあるかのようにコンパイラーに表示されることです。その場合、 への割り当ては行われませんavg2

于 2013-02-06T01:51:02.213 に答える
0

avg2コンパイラは、if 条件の 1 つが true と評価され、そのために割り当てられることを認識できないためです。回避策の 1 つは、無条件を配置することelseです。

if (c < a && c < b) {
 ....
} else {
   throw new RuntimeException("Cannot be here");
}

// now use can use avg2 here
于 2013-02-06T01:51:22.163 に答える
0

「初期化されていません」エラーを修正するには、3 つの if ステートメントを 1 つの if-else ブロックに再配置する必要があります。コンパイラは、if ステートメントの条件が true かどうかをテストするつもりはありませんが、変数を if-else ブロックの各部分 (「if all else fails」を含める必要があります) 内に割り当てると、必然的に初期化されます。

double avg2;
if (a < b && a < c)
{
    System.out.println("The lowest score was: " + a);
    System.out.println("The average without the lowest score is: " + ((b + c) / 2));
    avg2 = ((b + c) / 2);
}else if (b < a && b < c)
{
    System.out.println("The lowest score was: " + b);
    System.out.println("The average without the lowest score is: " + ((a + c) / 2));
    avg2 = ((a + c) / 2);
}else {
    System.out.println("The lowest score was: " + c);
    System.out.println("The average without the lowest score is: " + ((a + b) /2));
    avg2 = ((a + b) / 2);
}

この手順を実行するより良い方法:

double avg2;
double lowest = a;
if(lowest > b)
    lowest = b;
if(lowest > c)
    lowest = c;
System.out.println("The lowest score was: " + lowest);
avg2 = (a + b + c - lowest)/2;
System.out.println("The average without the lowest score is: " + avg2);
于 2013-02-06T02:00:17.467 に答える