• ベストアンサー

Javaの問題がわからないです

Javaでわからない問題があります。 int num=0,count; while(num<3){ num++; //ここにコードを挿入 Systrm.out.println("num="+num+":count="+count ); } } 問題のつづきが画像に続きます。 この問題なのですが、答えはcです。 なぜ生成されるコードにnum=3があるのですか? num=3をwhileの部分にいれたら、3<3になってfalseになりその時点で終了になるはずですよね?

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

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.7

>なぜ生成されるコードにnum=3があるのですか? >num=3をwhileの部分にいれたら、3<3になってfalseになりその時点で終了になるはずですよね? プログラムの基本中の基本、「命令文は1つずつ順番に実行される」という大原則があるからです。 そこを理解してください。 ご質問の、問題部分を除いたループを取り出すと、次のようになります。 あと説明のための出力も加えます。(行頭の数字コロンは説明のための行番号です) 1: int num=0; 2: while(num<3){ 3: Systrm.out.println("num="+num); 4: num++; 5: Systrm.out.println("→num="+num); 6: } これを実行すると、 1: num=0 にする 2: num < 3 なのでブロックを実行 3: "num=0" を出力 4: numを1増やす (num=1) 5: "→num=1" を出力 6: ブロック終端なので2の条件判定に戻る 2: num < 3 なのでブロックを実行 3: "num=1" を出力 4: numを1増やす (num=2) 5: "→num=2" を出力 6: ブロック終端なので2の条件判定に戻る 2: num < 3 なのでブロックを実行 3: "num=2" を出力 4: numを1増やす (num=3) 5: "→num=3" を出力 6: ブロック終端なので2の条件判定に戻る 2: num < 3 ではないのでブロックを実行せず、次の命令へ (7:) 何もないのでプログラム終了 ご質問にある問題では、「→num=」を出力するのと同じタイミングで、出力していますので、「num=3」まで出力される、ということになります。 まあ、一目でプログラム全体が目に入ってしまうので、「num=3では実行されない」と考えてしまいますが、そこがコンピュータと人間の違うところです。 「num=3になった後、条件を判定した時に、成立しなければ、終了」 というのが正確な理解です。 ---- 「なんとなく全体を見て」プログラムを理解しようとしていませんか? それではダメです。 愚直なコンピュータの動作を、変数の変化とともに、一行一行追って行くのがプログラムを読むということです。 そしてこの問題のように、「どのようなコードが入るか」という問題は、難しいです。 「そのコードを入れたらどのような動作になるか」ということを、全パターン頭の中で考えろ、と言うことですから、その問題には見た目の5倍の量のプログラムが書かれているのと一緒なんですね。 そういう思考経路を、この問題は要求しています。

minutes01
質問者

お礼

ありがとうございますすごく勉強になりました

その他の回答 (6)

回答No.6

No.5の者ですが、while文はfalseになるまで続けるんでした、すみません🙇🙇🙇 言い訳すると、実務ではwhile文はほとんど使いません。ゲーム業界なら使うのかもしれませんが、while文は無限ループになってメモリを食い潰す恐れがあるので、余程のことがない限りはfor文を使っています。

回答No.5

前提として、while(/** 条件 */)やfor(/** 条件 */)の条件を評価するのは、それぞれのループの開始前になります。 1つ1つ処理のステップをみてみましょう。 while (num < 3) { // ① num++; // ② for (count = 1; count < 3; count++) { // ③ Systrm.out.println("num="+num+":count="+count ); // ④ } } 実行順序はwhileの1ループにつき①→②→③→④→③→④となり、whileの条件を満たすまで(trueになるまで)また①から処理を続けます。 さて、3<3のbool値ですが、これは数学の時間になります。 3<=3はtrueですが、3<3はfalseです。 a<bは"aはbよりも小さい"場合にtrueになります。aとbを3に置き換えると、"3は3よりも小さい"となって、違うということが分かります。 ややこしいですが、試しに System.out.println(3<3); を実行してみると、falseになるのがわかるかと思います。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

>条件判定は処理文終わったあとですよね? while (条件判定) { 処理文 } の事を書かれているのなら違います。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.3

とりあえず書いておきますが、 問題を解きまくることでJavaがわかるようになるわけではないですよ。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

numが3になるタイミングと num < 3の判定をするタイミング わかってますか?

minutes01
質問者

補足

num=2のときにインクリメントされて3になるんですかね。条件判定は処理文終わったあとですよね?

  • hiodraiu
  • ベストアンサー率15% (451/2846)
回答No.1

while(num<3)の次の行でnum++が実行されるので3回目のWhileのループでnumは3になります。whileの判定はループの先頭なので、ループの途中でnumが3になっても、そのループ内の処理は行われます。 と回答したけど、そもそもプログラムというものが、どう処理されるのかという根本が解かっていないってことなのでしょうか?ループがどういう動きをするのかが解かっているなら、こんな質問は出ないように思います。

専門家に質問してみよう