老親介護に悩む30~60代の方へ
老親介護ねっと[老人ホーム編]
トップ 老人ホームの選び方 介護関連ニュース 新規オープンホーム情報 老人ホーム取材レポート お問い合わせ リンク集 Q&A

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

何故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
終了しました。

となると思うのですが、

どうしてでしょう。

解説のほどお願い申し上げます。

投稿日時 - 2018-07-16 07:45:26

QNo.9518681

困ってます

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

>五未満だから
>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(五未満); )によってループから抜け出します。
ループからの抜け出しの判定がコンソールへの出力が終ってからになるため変数の名前が意味する条件と異なる結果になってもプログラムとしては正しい動作になっています。
プログラマーの感性が問題視される例ではないかと思います。
変数名は誤解しない用語を使うべきでしょう。

投稿日時 - 2018-07-16 13:32:45

補足

前置インクリメント、後置インクリメント、理解があやふやです。
「ループからの抜け出しの判定がコンソールへの出力が終ってからになるため変数の名前が意味する条件と異なる結果になってもプログラムとしては正しい動作になっています。」ここの所は難解です。

投稿日時 - 2018-07-16 22:24:55

お礼

なるほど。

本当は「五以下」と書いた方がいいプログラムですね。

投稿日時 - 2018-07-16 16:27:59

ANo.7

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(9)

ANo.9

>本当は「五以下」と書いた方がいいプログラムですね。
そう言う問題ではないでしょう。
質問に提示のソースコードはdoループの動作を試すためのものでboolean変数の名称の良否を考えるものではないでしょう。
int index = 0;
do {
/* ここから実行するコードを記述する */

} while(index < 5);
のようにboolean変数の五未満を使わなくても同じ動作になります。
提示のソースは五未満の初期値がfalseであっても同じ結果になります。
似たようなループでも次の例では変数の初期値を誤ると{}内を実行せずに終了することがあります。
boolean 五未満 = false;
while(五未満){
/* ここから実行するコードを記述する */

}
両方のコードをあなたなりにコードを追加して試されるとどのような結果になるか分かるでしょう。
他人が書いたコードを試すだけが学習ではありません。
自分でやりたい課題を作ってコードを書いてみることも必要です。

投稿日時 - 2018-07-16 20:08:43

補足

ややこしいプログラムですね。

これからが思いやられます。

投稿日時 - 2018-07-16 22:18:46

お礼

解りました。

これからの勉強方針を工夫をこらします。

投稿日時 - 2018-07-16 22:12:48

ANo.8

>本当は「五以下」と書いた方がいいプログラムですね。

もっとよく考えましょう。
index < 5
は5以下ですか?

投稿日時 - 2018-07-16 20:05:45

お礼

ボクは考えずに書きましたね。

そこを突っ込まれると、心配でした。

案の定です。

早合点な事は書きません。

投稿日時 - 2018-07-16 22:15:28

index++;
System.out.println(index);
先に足してるから。
これを「逆に書いてみれば」わかるよ

投稿日時 - 2018-07-16 12:35:56

お礼

ご回答誠にありがとうございます。

投稿日時 - 2018-07-16 17:37:54

ANo.5

>参考書が間違っているのですか?

質問で書いてあるプログラムの説明が、その参考書にどのように書かれているかわかりませんから参考書が間違ってるかどうかはわかりません。

投稿日時 - 2018-07-16 08:45:19

お礼

ご回答誠にありがとうございます。

投稿日時 - 2018-07-16 09:23:13

ANo.4

>indexの値の確認方法を教えてください。

今までされた質問の回答で私でない誰かがしてますから頑張って探してください(安易に教えてもらえると思ってるから忘れるんでしょうに)。

投稿日時 - 2018-07-16 08:41:03

お礼

ご回答誠にありがとうございます。

投稿日時 - 2018-07-16 09:24:03

ANo.3

質問に書いてあるプログラムは

1. indexに0を設定
2. indexを+1
3. indexの値を出力
4. indexの値が5未満であれば2へ
5. 終了

ループを続けるかどうかの判定がindexの値の出力の後な事に注意。

投稿日時 - 2018-07-16 08:25:13

お礼

ご回答誠にありがとうございます。

投稿日時 - 2018-07-16 08:39:10

ANo.2

「5未満」ならプログラムは間違っています。
「5以下」ならプログラムは合っています。

投稿日時 - 2018-07-16 08:16:49

お礼

参考書が間違っているのですか?

チェックします。

投稿日時 - 2018-07-16 08:37:30

ANo.1

>どうしてでしょう。

そのようにプログラムが書いてあるから。
各行でのindexの値を確認すれば、わかることです。

各行でのindexの値の確認方法は、幾度となく教えてもらってるはずなので書きません。

投稿日時 - 2018-07-16 08:14:23

お礼

indexの値の確認方法は、マダ教わってないと思うか?

ボクが忘れてしまったかのどちらかでしょう。

度々すみません。

indexの値の確認方法を教えてください。

宜しくお願い申し上げます。

投稿日時 - 2018-07-16 08:35:56