10
private String getWhoozitYs(){
    StringBuffer sb = new StringBuffer();
    boolean stop = generator.nextBoolean();
    if(stop = true)
    {
        sb.append("y");
        getWhoozitYs();
    }
    return sb.toString();
}

これは、私がプログラミング コースで行っているプロジェクトのコードの一部です。私が抱えている問題は、ブール値の停止を宣言し、それにランダムに生成されたブール値を割り当てようとした後、if ステートメントでそれを使用して、StringBuffer にさらに y を追加する必要があるかどうかを判断できないことです。コンストラクター内に Random ジェネレーターがあるので、その部分は問題になりません。if 文の外側でブール値を宣言したので、内側で使用できると思いましたが、そうではないようです。本当の問題は、if ステートメントでランダムに決定されたブール値をどのように使用できるかということです。

4

8 に答える 8

27

if(stop = true)if(stop == true)、または単純に (より良い!) である必要がありますif(stop)

これは実際には、書く代わりに常に使用する理由を確認する良い機会if(something)です(スタイルが悪い!)。trueif(something == true)

そうすることでstop = true、あなたはに割り当てtrueられstop、比較されません。

では、なぜifステートメントの下のコードが実行されたのでしょうか?

JLS - 15.26を参照してください。代入演算子:

実行時の代入式の結果は、代入が行われた後の変数の値です。代入式の結果自体は変数ではありません。

あなたが書いたので、あなたは条件stop = trueを満たしていifます。

于 2013-03-14T15:03:59.157 に答える
4

ここでの問題は

(stop = true)が割り当てであり、比較ではない場合。

試すif (stop == true)

また、 Javaプログラマーが犯すトップ10のエラーも見てください。

于 2013-03-14T15:04:44.660 に答える
3

実際、再帰呼び出しごとに1つ作成するのではなく、StringBufferのインスタンスを1つだけ使用すれば、アプローチ全体がよりクリーンになります...私は次のようにします:

private String getWhoozitYs(){
     StringBuffer sb = new StringBuffer();
     while (generator.nextBoolean()) {
         sb.append("y");
     }

     return sb.toString();
}
于 2013-03-14T15:15:23.030 に答える
2
if(stop == true)

また

if(stop)

=割り当て用です。

==は状態をチェックするためのものです。

if(stop = true) 

停止にtrueを割り当て、if(true)を評価します。したがって、stopには常にtrueが割り当てられるため、内部のコードは常に実行されます。

于 2013-03-14T15:04:49.143 に答える
1

はブール値なのでstop、その部分を次のように変更できます。

//...
if(stop) // Or to: if (stop == true)
{
   sb.append("y");
   getWhoozitYs();
}
return sb.toString();
//...
于 2013-03-14T15:04:42.660 に答える
1

これを試して:-

private String getWhoozitYs(){
    StringBuffer sb = new StringBuffer();
    boolean stop = generator.nextBoolean();
    if(stop)
    {
        sb.append("y");
        getWhoozitYs();
    }
    return sb.toString();
}
于 2013-03-14T15:05:03.877 に答える
1

=は割り当て用です

書きます

if(stop){
   //your code
}

また

if(stop == true){
   //your code
}
于 2013-03-14T15:05:56.420 に答える
1

さらに、あなたはただ書くことができます

if(stop)
{
        sb.append("y");
        getWhoozitYs();
}
于 2013-03-14T15:06:05.903 に答える