2

このコードに間違いはありませんが、eclipseは変数が初期化されていないことを示しています。これは単なる警告ですが、コンパイル後も機能しません。私は単にこのコードの間違いと事柄が100%正しいことを見つけることができません。このコードの構造は簡単に変更できないことに注意してください。以下に示すコードは単純化されているため、読む必要があまりありません;-)

int min1; float somefloat;
try {
    //setting values for min and somefloat
    min1 = 1;
    somefloat = 0.92f;
} catch (IOException ioe) {
    System.err.println("Read Exception");
} 
while (true){
    //warning: variables min1 and somefloat may not be initialized.
    float value1 = (1023 - min1) * somefloat;
    System.out.println("Value: " + value1);
}
4

7 に答える 7

2

ブロックに入る前に、すべての変数 を初期化する必要がありますtry。Javaコンパイラは、あなたの場合、例外が発生する方法がないことを知りません。

したがって、理論的に言えば、変数が初期化されないままになる例外がどこかにある可能性があります。そして、それは受け入れられません。したがって、警告。

変数をゼロに初期化するだけです。

int min1 = 0;
float somefloat = 0f;
于 2013-02-12T11:56:25.977 に答える
1

コンパイラは、具体的なケースで変数が初期化されるかどうかを分析しません。変数がtryでのみ初期化され、catchまたはfinallyでは初期化されない場合、変数が初期化されない可能性があることが保証されます。

のような「明白な」条件で同様の試みをしてくださいif(1>0) {}。コンパイラはコンパイルしますが、コードの分析は行いません。人間にとって何かが起こることは明らかですが、Java コンパイラーにはそのようなケースを検出するコードがなく、Java 構文によっても指定されていません。したがって、コンパイルを明確で予測可能かつ高速に保つために、コンパイラにはない AI を期待しています。

あなたのコードには、ところで、あなたが説明する代わりに報告されるエラーがありますIOException。スローできる場所がないためです。

于 2013-02-12T12:01:23.027 に答える
0

それらを宣言している間、または少なくともtry-catchブロックの外側でそれらを初期化する必要があります。コンパイラは、try-catchブロック内の初期化が正常に完了することを確認できないため、この場合、初期化されていない変数が外部に存在します。

int min1=0; float somefloat=0.0f;
于 2013-02-12T11:54:33.923 に答える
0

宣言中に変数を初期化する必要があります。tryの変数割り当てはその値を上書きし、例外が発生した場合(あなたの場合はどうすればよいかわかりません。)、デフォルト値を取ります。コンパイル中、コンパイラは例外をスローするかどうかに関係なくコードを調べないため(ただしthrow、一致するcatch必要があります)、明示的な初期化が必要です。

于 2013-02-12T12:07:07.963 に答える
0

ただし、Eclipseは変数が初期化されていないことを教えてくれます

で変数が初期化される前に例外がスローされる可能性があるため、警告が表示されますtry。その後while、変数内は初期化されないままになります。

于 2013-02-12T11:57:15.580 に答える
0

catchブロックに入った場合に備えて、初期値を持つ必要があります。これを試して:

int min1 = 0; float somefloat = 0f;
try {
   //setting values for min and somefloat
   min1 = 1;
   somefloat = 0.92f;
} catch (IOException ioe) {
    System.err.println("Read Exception");
} 
while (true){
  //warning: variables min1 and somefloat may not be initialized.
  float value1 = (1023 - min1) * somefloat;
  System.out.println("Value: " + value1);

}

于 2013-02-12T11:57:59.210 に答える
-1
private void tset(){
    int min1; float somefloat;
    try {
        //setting values for min and somefloat
        min1 = 1;
        somefloat = 0.92f;
    while (true){
        //warning: variables min1 and somefloat may not be initialized.
        float value1 = (1023 - min1) * somefloat;
        System.out.println("Value: " + value1);
    }
    } catch (Exception ioe) {
        System.err.println("Read Exception");
    } 
}

これはあなたが探しているコードかもしれません...

于 2013-02-12T12:01:33.087 に答える