【はじめてのJava】for文のネスト【基本構文編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
for文のネスト
前回の記事では、for文の中にif文を入れたネストの処理について解説しました。
for文の中にif文を入れることで繰り返し処理の中で条件分岐した処理を行うことができました。
今回は、for文の中にさらにもう1回for文をネストさせた場合の処理について解説していきます。
繰り返し処理の動きや回数が非常に複雑になりますが、実際のプログラムでは使う頻度は意外と多いです。
前回の例えでも紹介しましたが、プログラムでデータを検索するときに、検索したいデータが入れ子(箱の中にさらに箱が入っているようなイメージ)構造になっていることも多いです。
(例えば、生徒の名前を検索するときに、1組、2組、3組と繰り返しを使って検索しますが、さらにそれぞれのクラスで1番の生徒、2番の生徒…と検索していくような場合などです。)
目次
for文のネスト
for文は、変数を利用して、「iが〇〇の数字になるまで」というような形式で繰り返しを行っていました。
プログラムの中では、繰り返し処理の中でさらに別の繰り返し処理を行わせたいという場合が出てきます。
後ほどの記事で出てくる「多次元配列」という少し特殊な配列からデータを取り出す場合や、変数の構造が入れ子構造になっているような状態のデータを扱う際によく利用されます。
記述方法はシンプルで、for文の中にさらにfor文を書くことで実現できます。
(例)1×1~9×9 までの答えを表示するプログラム(〇×9になるごとに改行する)
// i の変数を使ったループ for( int i = 1 ; i <= 9 ; i++ ){ // j の変数を使ったループ for( int j = 1 ; j <= 9 ; j++ ){ System.out.print( i * j ); } System.out.println(); //改行 }
ネストしたfor文の処理
先ほどのプログラムを使って、ネストしたfor文がどのような順序で処理を行っているのか解説していきます。
ネストしたfor文の処理を理解するポイントは、外側のループと内側のループの処理の順序を把握することです。
基本的な動作は、「外側のループが1回処理をする中で、内側のループが指定された回数分の処理」を行います。内側のループの処理が終了すると、外側のループが1回進み、処理が一番上に戻りますので、もう一度内側のループの処理に入っていきます。
サンプルコード
for文の中にfor文をネストしたサンプルコードを見ていきましょう。
package java_silver; public class Nest_loop_2 { public static void main(String[] args) { for (int i = 1; i <= 5; i++) { //iが1から5まで繰り返される //iのループが開始するたびに画面に表示する System.out.println("iのループ : " + i + "回目"); for (int j = 1; j <= 3; j++) { //jが1から3まで繰り返される //jのループの繰り返しの中で、画面に表示する System.out.println(" jのループ : " + j + "回目(i = " + i + ")"); } //jのループが終了したあとに処理される System.out.println("---------------------------"); //改行 } } }
実行結果
サンプルコードで、外側のループではiが1から5まで繰り返されています。
iのループが始まる際に何回目のiのループに入っているかを表示しています。
iのループの中で内側のループに入り、jの値が1から3まで繰り返されています。
jのループの中で、何回目のjのループに入っているかを表示しています。
jのループが終了すると、jのループの後の処理(「—–」)を表示する処理を行います。
表示から、iのループの中でそれぞれjのループが始まっていることがわかります。
基本構文編・次回の内容
今回はfor文のネストを解説してきました。
次回は、for文のネストの中で、制御構文(break文とcontinue文)を扱う方法について解説します。
初めてのJavaシリーズの目次はこちら
基本構文編の記事一覧はこちら