ITスクールの授業7日目のまとめ1:制御文ー反復文(while / Do - while)
前書き
今回は制御文の中で、「反復文」をまとめると思う。
反復文は名前の通り、ユーザーが決めた回数ほどコードを繰り返して実行する文法である。ただし、本当にまったく同じコードを反復するというよりは、少しづつコードに変化を入れて、連続する範囲のコード実行や、決めた条件を満足するまで回数が決まってない反復をするなど、明確な目的をもって使える、思うより複雑な文法である。
今回はその反復文の中でも、「while」文と「do - while」文をまとめてみようと思う。while文は条件式を満足するまで無限にコードを実行するので、条件式が間違うとループに入る危険がある。ループに入らないように、必要な反復が終わったら反復文が終わるようにコードを組むことが重要である。
while文
while文は、条件式がTRUEであれば、つまりFALSEになるまでずっとブロックのコードを繰り返して実行する。
詳しい作動方式は下記のようである。
このため、while文を抜け出るための条件やコードをブロックの中に書いておかないと、while文が無限に実行されるループに落ちる危険がある。
while文の形式は下記のようである。
while(TRUEやFALSEが決められる条件式){
条件式がTRUEである場合実行するコード
}
上の形式を、実際のコードに変えると下記のようになる。
public static void main(String[] args) {
int i = 0; // 反復の制御のための変数を宣言
while(i < 5) {
System.out.println("Hi, Java");
i++; // このコードがないと、iの値が増えなくて、条件式がfalseになりません。(ずっと「i < 5」がtrueになる。)
//そうなるとループに落ちますので、気をつけるようにしましょう。
}
System.out.println("iの最後の値 : " + i);
System.out.println("反復の回数 : " + (i-1));
}//main
while文の条件式に「true」と書くと、基本的にループに落ちる。この場合は条件式で入れた変数を利用してwhile文を抜き出ることができなくて、他の文法を使ってwhile文を抜き出るしかない。例えば、「break;」を使うことができる。
public static void main(String[] args) {
int i = 0;
while(true) {
System.out.println(i);
if(i == 10) {
break; // while(true)である場合は、条件式だけではループを抜け出られない。
//そのせいで、「break;」を使って強制的にループを抜け出る。
}
i++;
}
}
重複while文
条件式に当たってコードが実行されているwhile文の中に、もう1つのwhile文を作成することもできる。
ただし、この場合にはwhile文の中にあるwhile文を制御する変数と、外側のwhile文を制御する変数が必要であるなど、すこし複雑なコードになる。
下記は、重複while文を使って九九の7の段を出力する例文である。
public static void main(String[] args) {
int i = 0;
int dan = 2;
while(dan <= 9) //外側のwhile文
{
i = 0; // while文の外側にある変数であって、反復するたびに0に値を変える。
System.out.printf("====九九の%d段====\n", dan);
while(i < 9) { // 内側のwhile文
System.out.printf("%d x %d = %d\n", dan, i+1, dan * (i+1));
i++;
}// while(i < 9)
dan++;
}//while(dan<=9)
}//main
do - while文
while文は、ブロックの中のコードを実行するためには必ず1回は条件式がTRUEである必要がある。
しかし、とりあえずコードを1回実行して、そのあとそのコードを実行するかを決められる場合があると、while文では非効率なコードを組むか、他のコードを探すしかない。
その場合、do-while文を使うとwhile文のコードを1回実行して、そのあと反復をするかするまいかが決められる。
do-while文の形式は下記のようである。
do{
実行するコード
} while(条件式);
do-whileの作動方式はwhile文と同じである。条件式を確認して、条件式がTRUEであるとコードを実行し、実行したあとまた条件式を確認することを繰り返す。
ただし、do-while文は上記の方式の上に、とりあえず1回コードを実行することだけが異なる。
次は、とりあえず1回キーボードで入力をしてみて、プログラムを終了するキーでないと、続いて入力を反復するコードである。
public static void main(String[] args) {
System.out.println("メッセージを入力してください。");
System.out.println("「q」を押すと、プログラムを終了します。");
Scanner sc = new Scanner(System.in);
String inputString;
do {
System.out.print("メッセージを入力:");
inputString = sc.nextLine();
System.out.println("入力したメッセージ : " + inputString);
} while(!inputString.equals("q"));
// 入力された文字列が「q」でないと、繰り返してブロックのコードを繰り返して実行
System.out.println();
System.out.println("「q」キーが入力され、プログラムを終了します。");
// 「q」が入力されると、上のdo-while文が終わってこのコードが実行
}
以上で、反復文の1つの「while」, 「do - while」文をまとめてみた。
前書きや例文の途中で、ずっとループに落ちるなどの危険なところだけど言っていた気がするが、その「条件が当たるかぎり、無限にコードを実行する」ということはすごく有益に使える文法である。
反復が続くということは、つまり反復の回数が決まってない場合、何回でもコードを実行させることができることでもある。決まってない回数を反復するプログラムであると、安全に作られたwhile文を使うとよりやすくプログラミングができる。
次には、決まってある回数だけコードを実行する反復文をまとめるこのにする。
Discussion