/*-< 演習:Ex1_11_1 >---------------------------------
6の目がでるまでサイコロを降り続けるプログラムを作成してください。
----------------------------------------------------*/
class Ex1_11_1 {
public static void main (String[] args) {
int dice;
while(true){
dice = 1 + (int)(Math.random() * 6.0); // 1~6までのランダムなint型を取得する
System.out.println("dice :" + dice);
// 6が出るまで降り続け、6が出たらif文の最後にbreakを付けて終了するようにした
if (dice == 6){
System.out.println("6が出たのでを終了します");
break;
}
}
}
}
反省点
・最初出力したときは、diceをwhile文の外で定義してしまったので、数字が固定されたまま無限ループを繰り返してしまった。
・if (dice == 6)とif (dice = 6)の表記の違いに気を付けること。数学の表現と一緒にしないように、比較するときは==。
改善点
・定義するときは、ループの外側で行うこと。
・条件を設定するときに注意深く書くようにする。
8~10行目の別の表記方法
int dice = 0;
while(dice < 6){
~~~whileの条件の「true」と「dice < 6」の違い~~~
・trueは、while+ifで組み合わせる。
メリット
1,終了条件をifで明示できる
2,初期化エラーが起きにくい
└diceの初期値を外側で定義する必要がなくなる
デメリット
1,読む人にとってif文を探して理解しなければならない
2,breakを忘れると無限ループのリスクがある
dice < 6
メリット
1,自然な条件式
└6がでるまでループすることがすぐ確認でき条件が明確
2、breakが不要
3、読みやすさ
└コードを読む順番が複雑ではない
デメリット
1,初期化が必要
└diceの初期値をループ外で設定する必要があり、忘れるとエラーや意図していない動作が発生する
2,ループ条件の変更が面倒
└条件式が固定されるため、終了条件を柔軟に変更しにくい
~~~whileとforの使い分け~~~
while文は繰り返し処理が前提となるため、条件に関連する変数はループ内で更新されることが一般的。そのため、変数を適切に更新する必要があるかどうかを常に意識することが重要。
if文は1回限りの条件分岐を行うため、変数を更新する必要がない場合が多く、条件判定に使用する変数はループの外側で定義されるケースが多い。