• ベストアンサー

[Java] while(true)の意味

Javaの参考書で、下記の文がありました。 ... while(true){ 処理 } ... whileの条件式で“true”と書いてありますが、trueではなくなる(falseになる)のは どのような処理が実行された時でしょうか? 出来れば具体的なコードでご教示頂けると助かります。 宜しくお願い致します。

  • Java
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.3

> 要は、このwhileを抜けるのは、どういった処理が実行されたらなのかな?? ・「処理」の中でbreak文が実行された(更なるループ内かswitch文の中にないこと) ・「処理」の中でreturn文が実行された(この場合この文があるメソッドから抜ける) ・「処理」の中あるいはそれから呼び出されるメソッドから例外が投げられた(この場合投げられた例外をキャッチできるところまで戻る。どこでもキャッチできなかった場合はプログラム終了) たぶんあなたは「こんないつまでも終わらないループにどんな意味があるのか」と思われて質問されたと思います。 確かにこれ(無限ループ)はそれを抜け出す手段をループ内に設けない限り意味がありません(というか、普通は作ってはいけない)。 しかし、実はわざと作られた無限ループは結構利用されているテクニックです。 たとえば、AWTやSwingなどのGUIプログラミングで何らかのイベント部分のみを書くだけでウィンドゥが書かれたとおりの動作を行いますが、あれはAWTやSwingなどの内部で以下のような処理を行っているからです。 (あくまでも疑似コードで、詳細は異なるかもしれませんが) while(true){  if(OSからのイベントが1件以上あるか?){   OSからのイベントを1件受け取り;   受け取ったイベントから処理を行うメソッドを決定し、パラメータを作成;   メソッド実行; // GUIフレームワーク既定のメソッドかもしれないし、プログラマーが記述したイベントハンドラかもしれない   if(メソッド実行結果が「プログラム終了」?)    break;  } } 上記以外にも、何かを待つ処理の場合は、無限ループ内でその何かが起きたかどうかかを判定し、何かが起きたらbreakする、というのが定番処理になっています。

hakase-chan
質問者

お礼

いやー、、、そんな使い方もあるんですね。。。 GUIはまったく勉強してないので、未知の領域です。。。 ご丁寧な回答ありがとうございます。

その他の回答 (2)

  • myr0326
  • ベストアンサー率52% (24/46)
回答No.2

while(true){ } で、永久ループになります。 抜けるには、breakを使います。 例えば、 int i=0; while(true){ i++; if(i==3){ break; } } とすれば、iが3のときにループを抜けることが出来ます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

true って定数だよね.

hakase-chan
質問者

補足

要は、このwhileを抜けるのは、どういった処理が実行されたらなのかな?? 具体的に、分かりますか?

関連するQ&A

  • while(!b) の使い方について

    こんにちは。ある書籍のサンプルコードの一部に、 boolean b=false; while(!b){ b=IsPrime(++current); } といった箇所があったのですが、このwhile文のループ条件がよくわかりません。IsPrime()の返す値がfalseでない間、つまりbがtrueである間、ループを繰り返すように見えましたが、実際はIsPrime()がtrueを返したとき、ループから抜けていました。 IsPrime()の返す値が逆になったときループを抜けるとか、いろいろ考えてみましたがどうもしっくりしませんしよくわかりませんでしたので、どなたがご説明の方よろしくお願いします。

  • 「true」と「false」

    ●質問の主旨 「( ) 」の 条件式 の 値 が「true」 なら「正解だ / right」とプリントしたい。 「false」 の時は「間違い / wrong 」とプリントしたい。 下記のようなコードを入力しましたが、 コンソールするとエラーが返されます。 どこが間違いなのか、コードを何度読み直しても 分かりません。どなたかご存知のかたご教示願います。 ●javascriptのコード if ("Leng".length === 4){ console.log("正解だ / right"); // 1行目が正しければ,ここのコードを実行 }else{ // 正しくなければ console.log("間違いだ / wrong"); }

  • while文の条件式に数字だけの場合の動作について

    下記コードはwhileの条件式に数字だけを入れた場合に trueかfalseを判断されるかを試したものです。 実行して見ると、10~0しか表示されず、-1以下は中断されました。 数字だけを入れた場合、0以上はtrueになり、 0よりも下はfalseと判断されるのでしょうか。 <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title></title> </head> <body> <script type="text/javascript"> var i = 10;  while( i-- ) alert(i); </script> </body> </html>

  • PHP whileの意味を知りたい

    お世話になります。 $input=trim(fgets(STDIN)); while($input){ $array[]=$input; $input=trim(fgets(STDIN)); } 上記の意味を教えてください。 while (条件式) 実行する処理; 例 $num = 0; while (num < 2){ print "num=".$num; } 今まではこういった式を学んでいました。 while($input)の$inputという条件式?? $input=trim(fgets(STDIN));の意味も飲み込めないです。 解説を宜しくお願いします。

    • ベストアンサー
    • PHP
  • while構文について質問

    以下は、ソースコードの一部です。それを見た上で私の質問に答えてください。 int i=0; while(true) System.out.println(i); i++ 質問:何故、whileの反復条件に「true」を書くと、無限ループになるのですか? その理由は、「while構文は、括弧の中の反復条件の判定の結果がtrueなら、処理を行うので、括弧の中にtrueを書くと、反復条件はtrueのまま変わらないので、その判定結果はtrueと判断されつづけ無限ループする」こういうことでしょうか?

    • ベストアンサー
    • Java
  • 【Java】プログラムの読み方

    Javaの学習を始めて数週間の初心者です。 皆さんのお知恵を貸してください。 条件分岐、ループ、配列、メソッドを使用したプログラムを作成する、 という課題です。習っただけでなく自分でちゃんと使えるか、という意図だと思います。 素数を判定するプログラムにしようと考えました(もっと単純なもので構わないのですが、思いつかなかった…)。 ネットを検索して考え方を参考にしながら、書いてみました(コピペではないです)。 不細工で読みにくいかもしれませんがよろしくお願いします。 概要(問題のソースは最下部) ・キーボードで3つの数字を入力し、それらを配列numに代入する(readLine使用)。[メソッド][配列] ・(ここからペーストしたソース)配列をfor文で足し込み合計値をsumに代入。[ループ] ・2以上とそれ以外に分ける(素数は2~)。[条件分岐] ・2以上、sum未満の数で順番に割っていく。 ・1回でも割り切れたらboolean型sosuにfalseを代入、処理を終了させる。 (ここには載っていませんが、sosuはtrueで初期化済み) ・sosuがtrueかfalseかで表示を変える。 とりあえずソースを書いてコンパイルも通り、実行した結果も一応私の意図通りに動きます。。 が、これを講師の方に動きを説明しないといけません。一つ一つの動きは理解できるのですが、 ifの入れ子のブロックで処理がどう移っていくのかが不明瞭です。 お訊きしたいのは以下のケースで処理がどう動くのか、です。理由もお願いします。 (1)2つ目のfor文、1回目でfalseの場合(例えばsumが2の時) …2の場合、「素数です」と表示されますが、改めて読むと「elseに飛んでsosu = falseになるのでは?」 という疑問があります。具体的な内容を伏せて講師の方に訊いてみると「上のif文でtrueになっても その下のfor文でfalseならばelseに飛ぶはず」と言われました。 (2)2つ目のif文、falseになった場合 …この場合、falseなら素数と判定された、と思っていて実行結果もそのようになるのですが、 「elseに飛ぶ、が正しいならおかしくないかな?」と感じます。 (3)breakの後 …大体上と同じ疑問です。 (4)要は入れ子になっている場合、どこに処理が移るかがちゃんと解っていないのだと思います。 このような場合の読み方のアドバイスをお願いします。 情報に不足があればご指摘ください。 ↓ここからソース↓ (略) System.out.println("※合計値はint型の範囲内になるよう注意してください。"); (略) int sum = 0; for (int i = 0; i < num.length; i++) { sum += num[i]; } if (sum >= 2) { for (int i = 2; i < sum; i++) { if (sum % i == 0) { sosu = false; break; } } } else { sosu = false; } if (sosu == true) { System.out.println("\n合計値" + sum + "は素数です。"); } else { System.out.println("\n合計値" + sum + "は素数ではありません。"); } (以下略)

    • ベストアンサー
    • Java
  • do~while文がよくわかりません

    今参考書で勉強しているのですが、do~while文がよくわかりません 。コードは下記のようになります。どうして前の処理結果が足されていくのか理解できません。こんな馬鹿にどうかわかりやすくご教授していただけないでしょうか!? <?php $s = $i = 0; do{ ++$i; $s += $i; }while($i < 10); print "1 から $i までの和は $s"; ?>

    • ベストアンサー
    • PHP
  • このwhile文、ずっと回っているのでしょうか?(iアプリ・Java)

    このwhile文、ずっと回っているのでしょうか?(iアプリ・Java) //trueを入れたwhile文 while(true){  if(keyEvent == Display.KEY_1){   //ボタン「1」をプッシュされた時の処理(内容は文字列出力など、適当に。)  }  //keyEventを初期化。(少なくとも、「1」ではない数字に)  keyEvent = -555; } //キーイベント(※iアプリ)の処理  public void processEvent(int type, int param) {  if (type==Display.KEY_PRESSED_EVENT) keyEvent=param; } このような記述を書籍で見掛けました。 動作としては、問題なく動いているのですが、 これは、キーイベント待ちの無限ループという感じなのでしょうか? ループしている間、常に回っていて、ハードウェアに仕事をさせている(電力消費)ということなのでしょうか?

    • ベストアンサー
    • Java
  • PHPのwhileの理解の仕方教えてください。

    初めまして。つい最近PHPを勉強しようと始めました。 初歩の初歩でまったくの知識がなく、参考書を何度も読んでいますが、 理解の仕方が分かりません。 下記のwhileの例文にについてお教えください。 <?php echo "整数を入力:"; $a = trim(fgets(STDIN)); $result = false; $n = 2; while($n <= $a/2){ if($a % $n == 0){ $result = true; } $n++; } if($result){ echo $a . "は、素数じゃないです。"; } else { echo $a . "は、素数です。!!"; } ?> 例文の中の$result = false; や$result = true;が 参考書には説明していなく、 どのようにwhileの構文では解釈すればよいのか お教えください。(あってもなくてもよいのか?) この$result = false;がなくてもPHPで動作はできるのは確認済みなのですが、 どうしてもこの部分が気になり、理解をしようと別の参考書のwhileの部分を読みましたが、 全く理解できませんでした。 この程度の知識で無謀だというのは十分承知しておりますが、 今後も同様な事(何が書いてあるか分からない)が起きると思いますので、 何か良いアドバイスをお願い致します。

  • while文の動作に関して

    以下のwhile文の動作結果に関して質問なのですが、 実行結果に「3」が表示される理由が理解できておりません。 numが「3」のときは「false」に該当するような気がするのですが。 ご教示頂ければ幸いです。   public class Asterisk {     public static void main(String args[]){       int num = 0;       while(num++ < 3) {         System.out.println(num);        }     }   }   実行結果   1 2 3

    • ベストアンサー
    • Java

専門家に質問してみよう