りな塾#15 ループを入れ子にする
さて、FOR文について多く説明することはないのですが、なかなか理解するのに慣れが必要な構文であるように思います。
少し複雑な処理を例に慣れていきましょう。
入れ子にしてみる
FOR文の中に、FOR文を書くことももちろんできます。
FOR( 3回繰り返す ){
// 処理①
FOR( 10回繰り返す ){
// 処理②
}
}
このように書くと
処理①は、3回繰り返され、
処理②は、10 x 3 = 30回繰り返されます。
処理される順番は以下のようになるのがわかるでしょうか。
1回目 ①②②②②②②②②②②
2回目 ①②②②②②②②②②②
3回目 ①②②②②②②②②②②
変数に注意する
入れ子にする場合、1つ目のFORと2つ目のFORで使う変数について注意が必要です。ついつい習慣でiが使われることが多いので、サンプルプログラムなどを持ってきてそのまま使うと変数が干渉してしまうことがあります。
例:誤り
次のように、各FOR文の中で使っている変数が両方ともiになっているのがわかるでしょうか。こうしてしまうと変数が干渉してしまいます。これを実行すると、①②②②②②②②②②② の処理で止まってしまうでしょう。
※ここで止まってしまうプロセスも考えてみましょう。
for( i = 0; i < 3; i++){
//処理①
for( i = 0; i < 10; i++){
//処理②
}
}
敢えてこのように意図する場合もあるので、厳密には誤りではありませんが、ループの停止条件が別のループなどで干渉するプログラムを書くと予想外のバグにつながることも多いので注意しましょう!
例:正しい
繰り返し処理をそれぞれ独立した処理とするためには、変数をそれぞれ分けて処理させます。具体的には、次のようにするとよいでしょう。
for( i = 0; i < 3; i++){
//処理①
for( j = 0; j < 10; j++){
//処理②
}
}
1つ目のFORと2つ目のFORの中で使う、変数iとjについて注意が必要です。forを使うときは習慣でi使われることが多いので、サンプルプログラムなどからそのまま持ってきて使うと変数が干渉してしまうことがあります。
今日のクイズ
実行ログに星条旗を出力してみよう!
アメリカの国旗の星の部分をプログラミングで出力してみよう。★を1行に10個ずつ5行、合計50個の★をループ処理を使って表示してみましょう。
star = '★';
newLine = '\n'; // 改行
star、newLineという変数にそれぞれ、★という文字と、改行コードが入っています。この変数を使って次のように実行ログに出力させてください。
この記事が気に入ったらサポートをしてみませんか?