[解決済み】"while(true) "ループはそんなに悪いのか?[クローズド]
質問
私は数年前からJavaでプログラミングをしていますが、つい最近、正式な学位を取得するために学校に戻ってきたところです。最後の課題で、以下のようなループを使うと減点されると知って、かなり驚きました。
do{
//get some input.
//if the input meets my conditions, break;
//Otherwise ask again.
} while(true)
私のテストではコンソールの入力をスキャンしているだけですが、このようなループは推奨されないと聞きました。
break
と同じようなものです。
goto
しかし、私たちはそれをしないだけです。
の落とし穴は十分理解しています。
goto
と、そのJava版である
break:label
そして、私はそれらを使わないという良識を持っています。また、より完全なプログラムであれば、例えばプログラムを終了させるなど、何か他の脱出方法を提供することになると思いますが、教授が挙げた理由はそれではなかったので、...。
の何が問題なのでしょうか?
do-while(true)
?
解決方法は?
とは言いません。 悪い - でも、普通なら代替品を探すくらいはしますよね。
最初に書くような状況では、ほとんどいつも少なくとも
試みる
より明確なものにするためにリファクタリングする必要があります。どうしようもない場合もあります(あるいは、代替案として
bool
変数は、ループの終わりを示す以外には何の意味も持ちません。
break
ステートメント)ですが、少なくとも試してみる価値はあります。
を使った方が分かりやすい例として
break
フラグよりも、考えてみてください。
while (true)
{
doStuffNeededAtStartOfLoop();
int input = getSomeInput();
if (testCondition(input))
{
break;
}
actOnInput(input);
}
では、強制的にフラグを使用するようにしてみましょう。
boolean running = true;
while (running)
{
doStuffNeededAtStartOfLoop();
int input = getSomeInput();
if (testCondition(input))
{
running = false;
}
else
{
actOnInput(input);
}
}
私は、後者の方が読むのが複雑だと考えています。
else
ブロックは
actOnInput
がよりインデントされていることを確認します。
testCondition
を返します。
true
がないことを確認するために、ブロックの残りの部分を注意深く見ていく必要があります。
後
は
else
ブロックが作成されます。
running
に設定されています。
false
を表示するかどうかを設定します。
は、その
break
ステートメントを使用すると、意図がより明確に伝わり、ブロックの残りの部分は以前の条件を気にすることなく、必要な処理に取り掛かることができるようになります。
これは、メソッド内に複数のreturnステートメントがある場合と全く同じ種類の議論であることに注意してください。たとえば、最初の数行でメソッドの結果がわかる場合 (たとえば入力が null や空、ゼロなど)、その結果を直接返すほうが、結果を格納する変数や他のコードのブロック全体、そして
最後に
a
return
ステートメントを使用します。
関連
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] javaでメソッドを呼び出すプログラムのエラー修正
-
[解決済み] Maven: assembly-pluginが全く実行されない
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでネストされたループから抜け出すには?
-
[解決済み] Do-whileループをエミュレートする方法は?
-
[解決済み] Bashでの単一行whileループの構文
-
[解決済み] 3つのブール値のうち、少なくとも2つが真であるかどうかをチェックする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JSlint: 予期しない 'for' [重複].
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] HashMapのtoString関数はなぜ異なる順序で自分自身を印刷するのですか?
-
[解決済み] Firebase クラスにシリアライズするプロパティが見つからない
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] javax.naming.NameNotFoundException
-
[解決済み] ファイルを作成せずに、ファイルが存在するかどうかをチェックする
-
[解決済み] javaでAnnotation Inheritanceのようなものはあるのでしょうか?
-
[解決済み] javaでメソッドを呼び出すプログラムのエラー修正
-
[解決済み] x--やx++はここで何をするのですか?