• ベストアンサー

while構文について質問

以下は、ソースコードの一部です。それを見た上で私の質問に答えてください。 int i=0; while(true) System.out.println(i); i++ 質問:何故、whileの反復条件に「true」を書くと、無限ループになるのですか? 私の仮説では、trueは「条件を満たす」という意味だから、よって反復条件を満たし続けるので、永遠にiを表示し続けるということでしょうか?

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

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

  • ベストアンサー
  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

> 私の仮説では、trueは「条件を満たす」という意味だから ちょっと違います。 while文は括弧の中の条件式が「True」の間回り続けます。 なので、質問のように「True」を入れると常に判定が「True」になるので、永久ループになるのです。 違うと言うのは、「True」はTrueで「条件を満たす」ではないからです。 条件判断の結果、条件を満たしていればTrueを返すと言っても良いです。

wantanton
質問者

お礼

丁重なご回答ありがとうございます^^ つまり、無限ループし続ける理由は、「trueは「条件の成立」を表すから、whileは条件が成立している限り処理を実行し続けるから、無限ループし続ける」ということでしょうか?

wantanton
質問者

補足

お礼で書いた追加の質問訂正します 汗 無限ループの理由は、「while構文は、括弧の中の反復条件の判定の結果trueなら処理を行うので、括弧の中にtrueを書くと、その判定は常にtrueなので、無限ループする」こういうことでしょうか?

その他の回答 (2)

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.3

#1です。 #2さんへ。 この質問者さんは、「自分で設問し、それに対する自分の仮説が合っているかどうか?」の質問をする方で有名な方です。 (悪い意味ではありません。) (ちょっと諄い時があるけど…。) なので、仮説に対する回答をしないと質問者さんは満足しないと思いますよ…。 ※ 回答じゃなくて済みません。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

ANo.1が正しいのはよく分かりますけれど, 初心者が「私の仮説では…」のような説明をしたとしても,私的には違和感はありません。それでいいんじゃないかと思います。 質問者の方へ。 その仮説を検証するために次のコードを実行して,true(真) と false(偽) という予約語が何を指しているのか確認してみてください。iに代入する値を変えて試してみてもよいでしょう。 class Q6804373 { public static void main(String args[]) { int i = 0; System.out.println(i == 0); System.out.println(i > 1); } }

wantanton
質問者

お礼

丁重なご回答ありがとうございます^^ さっそくソースコード試してみます^^

関連するQ&A

  • while構文について質問

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

    • ベストアンサー
    • Java
  • JAVAのwhileループについての質問です

    こんばんわ。 javaのforループをwhileループ構文に書き換える問題で詰まっています。 僕はプログラミング超初心者なので、いろいろ考えたが、なかなか答えが出ていません。 ぜひ、わかる方に教えていただきたくここで質問させてもらいました。 ソースコードは以下です class S7j4{ public static void main(String args[]){ short a[] = {26,54,39,71,83,100,98,47,82,65}; short work; int i,j,n; n = 10; for (i = 0;i< n; i++) System.out.print(a[i] +" , "); System.out.println(); for(i = 0; i < n; i++) for(j = 0; j < n;j++) if(a[i] < a[j]){ work = a[i]; a[i] = a[j]; a[j] = work; } for(i = 0; i< n;i++) System.out.print(a[i] + " , "); System.out.println(); } } ぜひ一つよろしくお願いしますm(-_-)m

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

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

  • for構文内の変数について質問

    以下のソースコードの一部を見た上で私の質問に答えてください public class A { public static void main(String arg[]){ for(int i=0; i<2; i++){ for(int k=0; k<3; k++){ System.out.println(i+"-"+k); } } } } このソースコードを実行すると、以下のような数字がeclipsのコンソール画面に表示されます。 0-0 0-1 0-2 1-0 1-1 1-2 質問:変数kの値は、1、2と増えているに関わらず、再び0に戻ってますよね? 何故変数の中身の数値がクリアーされてるのですか? 質問2:for構文を一度脱出すると、変数の中身はクリアーされるのですか?それとも『ローカル変数の中身だけクリアー』されるのですか?

    • ベストアンサー
    • Java
  • java while文です。教えてください(__)

    public class mondai2{ //プログラム開始 public static void main(String args[]){ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int i; int ans=0; int seikai=0; for(i=0;i<5;i++){ try{ { Random ran = new Random(); int num1 = ran.nextInt(8)+1; int num2 = ran.nextInt(8)+1; ans = num1*num2; System.out.print("問題"+(i+1)+":"); System.out.print(num1 + "×" +num2 + "="); String s =in.readLine(); seikai = Integer.parseInt(s); if(seikai==ans){ System.out.println("正解"); }else{ System.out.println("不正解"); } } }catch(IOException e){ System.out.println("エラー"); } } } } このプログラムをwhile文か、do while文にして正解が出るまで問題が出続けるようにしたいんですけど、まったくわからなくて困っています>< 教えてください(+o+)

    • ベストアンサー
    • Java
  • この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
  • while文の指定エラー

    int beginIndex = 0; //現在のindex int endIndex = txt.length(); //最後のindex //while(txt.substring(beginIndex, endIndex).length() > 0){ out.println(txt.substring(beginIndex, endIndex).length()); beginIndex += 300; out.println(txt.substring(beginIndex, endIndex).length()); beginIndex += 300; out.println(txt.substring(beginIndex, endIndex).length()); beginIndex += 300; //} String型の変数txtの長さを読み込んで、beginIndexの値を300ずつ増やしていくソースなのですが、このようにすると結果が得られるのですが、 int beginIndex = 0; //現在のindex int endIndex = txt.length(); //最後のindex while(txt.substring(beginIndex, endIndex).length() > 0){ out.println(txt.substring(beginIndex, endIndex).length()); beginIndex += 300; } のようにwhileの部分のコメントを外し、txtの長さが0になるまで回そうとするとエラーが起きてしまいます。 while文の指定だとは思うのですが、どこがおかしいのか直し方がわかりません。 わかる方教えてください、よろしくお願いします。

    • ベストアンサー
    • Java
  • javaファイルの質問!

    public class kazuate{ public static void main(String args[]){ int computer = (int)(Math.random()*100)+1; int player = 0; int count = 0; System.out.println("数当てゲーム(範囲は0~99)"); System.out.println("何回で当てられるかな?"); while(true){ count++; System.out.print("数字を入力してください"); player = Integer.parseInt(args[0]); if(computer > player){ System.out.println("小さいです。"); }else if(computer < player){ System.out.println("大きいです。"); }else if(computer == player){ System.out.println(count +"回目で当りです。"); break; } } } } コンパインしたら break文を使っているのに繰り返しがとまらず永遠に回答が流れてしまいます。なぜでしょうか?

  • 配列とwhileを使った2重ループを使って書きたい

    今JAVAの勉強をしているのですが、「以下のような画面を表示するコードをint型2次元配列とwhileを使った2重ループを使って書いてください。」 ======================================= a[0][0]:1 a[0][1]:2 a[1][0]:3 a[1][1]:4 ======================================= の問題をやっているのですが実行してみると a[0][0]:1 a[1][1]:4 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at exsercise141.java.Exsercise141Java.main(Exsercise141Java.java:32) Java Result: 1 ビルド成功(合計時間: 0秒) と表示されてしまい、a[0][1]:2とa[1][0]:3が表示されません。 コードは以下のとおりです。 public static void main(String[] args) { // TODO code application logic here int i=0; int j=0;//変数を宣言 int B [] [] = new int [2] [2];//2次元配列を宣言 //======================================== B [0] [0] = 1;// B [0] [1] = 2; //========================================== B [1] [0] = 3; B [1] [1] = 4; //========================================== while(i<=3) { while(j<=3) { System.out.println("a["+i+"]["+j+"]:"+B[i][j]); i++; j++; } } } } どのようにすればa[0][1]:2とa[1][0]:3も表示されますか? ご教授願います。 ちなみにNetBeansを使用しております。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 書き換え

    以下のソースコード(*を使って二等辺三角形を表示するプログラム)をwhile文のかわりにdo-while文を使って書き換える方法が分かる方ぜひ教えてください。いろいろ試しましたがコンパイルできずに困っています↓ //Triangle2.java class Triangle2{ public static void main(String args[]){ try{ if(args.length !=1){ System.out.println("Please input single positive integer!"); } else if(Integer.parseInt(args[0])>0) { int n = Integer.parseInt(args[0]); int i=0; while(i < n){ int j=0; while (j <= i){ System.out.print("*"); j++; } System.out.println(); i++; } int m=n-1; while(m > 0){ int k=m; while(k > 0){ System.out.print("*"); k --; } System.out.println(); m --; } } else{ System.out.println("Please input single positive integer!"); } }catch(NumberFormatException e){ System.out.println("Please input single positive integer!"); } } }

専門家に質問してみよう