• ベストアンサー

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
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
noname#158634
noname#158634
回答No.2

書いてある内容を理解していないということでよろしいですね? 最初に出力されるのが「1」な時点で気づいてほしいですけど。 while(num++ < 3) ここで、(num < 3)が判定された「後で」インクリメントが行われます。 後置インクリメントとはそういうものです。 要するに 0 < 3 //=> true 0++ //=> 1 System.out.println(1) 1 < 3 //=> true 1++ //=> 2 System.out.println(2) 2 < 3 //=> true 2++ //=> 3 System.out.println(3) という3回ループです。OK?

その他の回答 (2)

回答No.3

(回答No.1の補足) > ++演算子を前にして(++num)とすると、期待の処理になるかもしれません。 とは、下記のことです:   public class Asterisk {     public static void main(String args[]){       int num = 0;       while(++num < 3) {         System.out.println(num);        }     }   }

回答No.1

++演算子が後ろになっているので、最後のインクリメント(2から3になるとき)において、while条件での評価時点ではnum++はまだ2であるなるためと思われます。 ++演算子を前にして(++num)とすると、期待の処理になるかもしれません。 ご参考URL: http://www.site-cooler.com/java/j2se/03_01.htm ※以上のご回答はご参考情報ですので、間違っていたらすみません。

関連するQ&A

  • for文の実行結果について

    public class Trace2 { public static void main (String[] args) { int i; int num; num = 1; for (i = 0; i < 10; i++) { num += num; } System.out.println("iの値は" + i); System.out.println("numの値は" + num); } } 実行結果は iの値は10 numの値は1024になります。 何故こうなるのですか?

    • ベストアンサー
    • 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
  • javaのwhile文について

    すいません再び質問です。 じゃんけんの問題です(0がグー、2がチョキ、5がパー、指の本数です) public class Sample9_2 { public static void main(String[] args) { int[] a = { 0, 5, 5, 0 }; int[] b = { 2, 5, 2, 2, 5, 0, }; int[] c = { 5, 0, 2, 0, 2, 5, 2 }; int index = 0; boolean 同じ手を出していない = true; while (同じ手を出していない) { if (a[index % a.length] == b[index % b.length] && b[index % b.length] == c[index % c.length]) { 同じ手を出していない = false; } else { index++; } } System.out.println((index + 1) + "回目で全員が同じ手を出しました"); } } 【実行結果】 50回目で全員が同じ手を出しました boolean 同じ手をだしていない = true と 同じ手を出していない = false の意味がわかりません; すいませんが回答お願いします。

  • JAVAコンストラクタについて

    JAVA のコンストラクタ定義の際に、下記のようにコンストラクタにvoidを付けた時と付けない時の処理結果が変わるのはなぜでしょうか。 (1) class O { protected int d; O(){ System.out.println("O = " + d); } } class Study_6_3main_void { public static void main(String args[]) { int i = 1; O OO = new O(); System.out.println("O = "); } } (2) class O { protected int d; void O(){ System.out.println("O = " + d); } } class Study_6_3main_void { public static void main(String args[]) { int i = 1; O OO = new O(); System.out.println("O = "); } } 実行結果 (1) O = 0 O = (2) O = 以上です。回答の程よろしくおねがいします。

    • ベストアンサー
    • Java
  • ビット演算子が使えない。

    こんにちは現在Javaをやっているいのですが、 //計算を行うプログラムです。 public class keisan{ public static void main(String args[]){ int num1=10; int num2=15; System.out.println("num1とnum2にいろんな演算を行っています。"); System.out.println("num1+num2は"+(num1 | num2)+"です。"); } } コンパイルはできましたが、 Exception in thread "main" java.lang.NoClassDefFoundError: keisan[ とエラーがでてきます。どうしたら良いのでしょうか? お願いします。

    • ベストアンサー
    • Java
  • 何故5までなのでしょうか?

    public class test3 { public static void main(String[] args) { int index = 0; boolean 五未満 = true; do { index++; System.out.println(index); 五未満 = (index < 5); } while (五未満); System.out.println("終了しました。"); } } 実行結果 1 2 3 4 5 終了しました。 五未満だから 1 2 3 4 終了しました。 となると思うのですが、 どうしてでしょう。 解説のほどお願い申し上げます。

    • ベストアンサー
    • Java
  • for文の実行結果について

    public class Trace2 { public static void main (String[] args) { int i; int num; num = 1; for (i = 0; i < 10; i++) { num += num; } System.out.println("iの値は" + i); System.out.println("numの値は" + num); } } 実行結果は iの値は10 numの値は1024になります。 for文をfor (i = 0; i <= 10; i++) { に変えるとiの値は11でnumの値は2048になります。 i < 10はiが10より小さいときtrue、i <= 10はiが10以下のときtrue。 10より小さいと10以下の違いが解りません。 何故、i <= 10になるとiの値は11でnumの値は2048になるのでしょう?

    • ベストアンサー
    • Java
  • for文の実行結果について

    public class Trace3 { public static void main(String[] args) { for (int i = 1; i < 4; i++) { for (int j = 1; j <= i; j++) { System.out.print(" " + (i * j)); } System.out.println(); } } } 実行結果は 1 2 4 3 6 9 になります。 i < 4でiは4より小さいで123は解るのですが、 j <= iでjはiより小さくjを含むで何故469になるのですか?

    • ベストアンサー
    • Java
  • java eclipse do-while文

    計算問題のプログラムです。No…0を選択したときにwhile文から抜け出したいです。 抜け出せない原因と解決方法(プログラム)を教えていただけるとありがたいです。 package lesson5; import java.util.Random; import java.util.Scanner; public class MentalArithmetic { static Scanner stdIn = new Scanner(System.in); static boolean confirmRetry(){ int cont; do{ System.out.print("もう一度?<Yes・・・1/No・・・0> : "); cont = stdIn.nextInt(); }while (cont != 0 && cont != 1); return cont ==1; } static void mondai1(){ Random rand = new Random(); do{ int p = rand.nextInt(900) + 100; int q = rand.nextInt(900) + 100; int r = rand.nextInt(900) + 100; while(true){ System.out.println(p + "+" + q + "+" + r + " = " ); int k = stdIn.nextInt(); // if(k == p + q + r) // break; System.out.println("違いますよ!!"); } }while (confirmRetry()); } public static void main(String[] args) { System.out.println("暗算力トレーニング!!"); while (true) { mondai1(); } } }

  • どこが違うのでしょうか?

    これも実行できません。 どうぞ、間違いを指摘してください。 public class Sample6_1 { public static void main(String[] args) { int probabilityOfRain = 20; if (30 <=probabilityOfRain) { System.out.println("傘を持っていく"); } if (probabilityOfRain < 30) { System.out.println("傘を持って行かない"); } }

    • ベストアンサー
    • Java

専門家に質問してみよう