- ベストアンサー
なぜ5までなのでしょうか?
- 質問文章のプログラムを解説します。
- プログラムは、1から数えながら5より小さいかどうかを判定します。
- 5未満の場合は処理を繰り返し、5以上の場合は終了します。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
>五未満だから >1 >2 >3 >4 >終了しました。 > >となると思うのですが、 そのように感じるのはあなたの誤解です。 プログラムで「五未満」と定義しているのはboolean変数の名称として漢字の「五未満」を充てただけで「判定」や「結果」という名前に置き換えても良いものです。 >解説のほどお願い申し上げます。 五未満 = (index < 5); indexは初期値が0でdoループにはいった直後にインクリメントし1になります。 最初のSystem.out.printlnでindexと言う変数の値をコンソールへ書き出してから五未満という変数へ index<5 のboolean値(true)が代入されます。 その後、 while (五未満);で繰り返す(doに戻る)か否かを判断しますので1回目は 1<5 = true なので繰り返します。 5回目のSystem.out.print(index);で5がコンソールへ出力されることは理解できますよね?、この時点では五未満という名前の変数にtrueが代入された状態ですが次の 五未満 = index<5 の結果はfalseになります。 従って、doループからの抜け出しの判定( While(五未満); )によってループから抜け出します。 ループからの抜け出しの判定がコンソールへの出力が終ってからになるため変数の名前が意味する条件と異なる結果になってもプログラムとしては正しい動作になっています。 プログラマーの感性が問題視される例ではないかと思います。 変数名は誤解しない用語を使うべきでしょう。
その他の回答 (8)
- bunjii
- ベストアンサー率43% (3589/8249)
>本当は「五以下」と書いた方がいいプログラムですね。 そう言う問題ではないでしょう。 質問に提示のソースコードはdoループの動作を試すためのものでboolean変数の名称の良否を考えるものではないでしょう。 int index = 0; do { /* ここから実行するコードを記述する */ } while(index < 5); のようにboolean変数の五未満を使わなくても同じ動作になります。 提示のソースは五未満の初期値がfalseであっても同じ結果になります。 似たようなループでも次の例では変数の初期値を誤ると{}内を実行せずに終了することがあります。 boolean 五未満 = false; while(五未満){ /* ここから実行するコードを記述する */ } 両方のコードをあなたなりにコードを追加して試されるとどのような結果になるか分かるでしょう。 他人が書いたコードを試すだけが学習ではありません。 自分でやりたい課題を作ってコードを書いてみることも必要です。
お礼
解りました。 これからの勉強方針を工夫をこらします。
補足
ややこしいプログラムですね。 これからが思いやられます。
- wormhole
- ベストアンサー率28% (1626/5665)
>本当は「五以下」と書いた方がいいプログラムですね。 もっとよく考えましょう。 index < 5 は5以下ですか?
お礼
ボクは考えずに書きましたね。 そこを突っ込まれると、心配でした。 案の定です。 早合点な事は書きません。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
index++; System.out.println(index); 先に足してるから。 これを「逆に書いてみれば」わかるよ
お礼
ご回答誠にありがとうございます。
- wormhole
- ベストアンサー率28% (1626/5665)
>参考書が間違っているのですか? 質問で書いてあるプログラムの説明が、その参考書にどのように書かれているかわかりませんから参考書が間違ってるかどうかはわかりません。
お礼
ご回答誠にありがとうございます。
- wormhole
- ベストアンサー率28% (1626/5665)
>indexの値の確認方法を教えてください。 今までされた質問の回答で私でない誰かがしてますから頑張って探してください(安易に教えてもらえると思ってるから忘れるんでしょうに)。
お礼
ご回答誠にありがとうございます。
- wormhole
- ベストアンサー率28% (1626/5665)
質問に書いてあるプログラムは 1. indexに0を設定 2. indexを+1 3. indexの値を出力 4. indexの値が5未満であれば2へ 5. 終了 ループを続けるかどうかの判定がindexの値の出力の後な事に注意。
お礼
ご回答誠にありがとうございます。
- Kaneyan-R
- ベストアンサー率42% (1340/3126)
「5未満」ならプログラムは間違っています。 「5以下」ならプログラムは合っています。
お礼
参考書が間違っているのですか? チェックします。
- wormhole
- ベストアンサー率28% (1626/5665)
>どうしてでしょう。 そのようにプログラムが書いてあるから。 各行でのindexの値を確認すれば、わかることです。 各行でのindexの値の確認方法は、幾度となく教えてもらってるはずなので書きません。
お礼
indexの値の確認方法は、マダ教わってないと思うか? ボクが忘れてしまったかのどちらかでしょう。 度々すみません。 indexの値の確認方法を教えてください。 宜しくお願い申し上げます。
お礼
なるほど。 本当は「五以下」と書いた方がいいプログラムですね。
補足
前置インクリメント、後置インクリメント、理解があやふやです。 「ループからの抜け出しの判定がコンソールへの出力が終ってからになるため変数の名前が意味する条件と異なる結果になってもプログラムとしては正しい動作になっています。」ここの所は難解です。