2020.3.23

Javaプログラミング

多重ループ

多重ループループの中にループがあるプログラムの構造です。入れ子、ネスト構造とも呼ばれます。ループの中にループを1つ書いた構造を2重ループ2重ループの中にループを1つ書いた構造を3重ループといいます。さらにその構造の中にループを入れていくと4重ループ5重ループ…となります。これらをまとめて多重ループといいます。

多重ループは、for文while文do~while文の中にループを書くことで作ることができます。その際、for文while文do~while文の組み合わせは任意です。for文の中にfor文for文の中にwhile文do~while文の中にwhile文など自由に組み合わせることができます。

以下はfor文をつかった2重ループの基本的な書き方です。for文の中にfor文を書いています。

	for ( 外側の初期化式; 外側の継続条件式;外側の変化式 ) {
		for ( 内側の初期化式; 内側の継続条件式;内側の変化式 ) {
			処理文1
       			処理文2
			   :
		}
	}

次に、for文を使った3重ループの基本的な書き方です。for文の中にfor文を書いて、さらにその中にfor文を書いています。

	for ( 初期化式1; 継続条件式1; 変化式1 ) {
		for ( 初期化式2; 継続条件式2; 変化式2 ) {
			for ( 初期化式3; 継続条件式3; 変化式3 ) {
				処理文1
        			処理文2
				   :
			}
		}
	}

それでは次の書き方はどうでしょうか?

外側のfor文の中に2つのfor文を書いています。

	for ( 外側の初期化式; 外側の継続条件式;外側の変化式 ) {
		for ( 内側1の初期化式; 内側1の継続条件式;内側1の変化式 ) {
			処理文1
       			処理文2
			   :
		}

		for ( 内側2の初期化式; 内側2の継続条件式;内側2の変化式 ) {
			処理文1
       			処理文2
			   :
		}
	}

外側のfor文の中に内側のfor文が2つありますが3重ループではありません。構造は2重ループですが一般的な2重ループとは違います。

さらに、次の書き方はどうでしょうか?外側のfor文の中に2重ループと1重ループが書かれています。

	for ( 外側の初期化式; 外側の継続条件式;外側の変化式 ) {
		// 2重ループ
		for ( 内側1の初期化式; 内側1の継続条件式;内側1の変化式 ) {
			for ( 内側2の初期化式; 内側2の継続条件式;内側2の変化式 ) {
				処理文1
       				処理文2
				   :
			}
		}

		// 1重ループ
		for ( 内側3の初期化式; 内側3の継続条件式;内側3の変化式 ) {
			処理文1
       			処理文2
			   :
		}
	}

これも多重ループですが、一般的なループの呼び方はありません。

このように、ループの作り方はいろいろあるので、必要に応じたループ構造を作成してください。

Javaソースコード - 2重ループ

ここからは、多重ループを使ったJavaソースコードを紹介していきます。

以下のJavaソースコードは、int型変数iを1~5まで1ずつ増やしていく外側のループの中に、int型変数jを1~3まで1ずつ増やしていく内側のループを作り、それらの変数の値をコンソール出力するものです。for文を使った2重ループの例です。

MultiLoop2.java

001
002
003
004
005
006
007
008
009
010
011
012
013
public class MultiLoop2 {
	public static void main( String[] args ) {
		// 外側のループ
		for ( int i = 1; i <= 5; i++ ) {
			// 内側のループ
			for ( int j = 1; j <= 3; j++ ) {
				System.out.println( "i=" + i );
				System.out.println( "j=" + j );
				System.out.println();
			}
		}
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis MultiLoop2.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac MultiLoop2.java

実行

C:\talavax\javasample>java MultiLoop2

出力結果

i=1
j=1

i=1
j=2

i=1
j=3

i=2
j=1

i=2
j=2

i=2
j=3

i=3
j=1

i=3
j=2

i=3
j=3

i=4
j=1

i=4
j=2

i=4
j=3

i=5
j=1

i=5
j=2

i=5
j=3

2重ループのなかで、変数i変数jの値を出力しています。

外側のfor文変数iが1のとき(最初)に、内側のfor文変数jが1から3まで1ずつ変わっていきます。したがって、変数i=1のとき、出力は以下のようになります。

i=1
j=1

i=1
j=2

i=1
j=3

同様に、変数i=2のとき、出力は以下のようになります。

i=2
j=1

i=2
j=2

i=2
j=3

このように、変数i=5になるまでこれが繰り返されます。

Javaソースコード - 3重ループ

以下のJavaソースコード3重ループの例です。参考にしてください。

MultiLoop3.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
public class MultiLoop3 {
	public static void main( String[] args ) {
		// 1つめのループ
		for ( int i = 1; i <= 5; i++ ) {
			// 2つめのループ
			for ( int j = 1; j <= 3; j++ ) {
				// 3つめのループ
				for ( int k = 1; k <= 2; k++ ) {
					System.out.println( "i=" + i );
					System.out.println( "j=" + j );
					System.out.println( "k=" + k );
					System.out.println();
				}
			}
		}
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis MultiLoop3.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac MultiLoop3.java

実行

C:\talavax\javasample>java MultiLoop3

出力結果

i=1
j=1
k=1

i=1
j=1
k=2

i=1
j=2
k=1

i=1
j=2
k=2

i=1
j=3
k=1

i=1
j=3
k=2

i=2
j=1
k=1

i=2
j=1
k=2

i=2
j=2
k=1

i=2
j=2
k=2

i=2
j=3
k=1

i=2
j=3
k=2

i=3
j=1
k=1

i=3
j=1
k=2

i=3
j=2
k=1

i=3
j=2
k=2

i=3
j=3
k=1

i=3
j=3
k=2

i=4
j=1
k=1

i=4
j=1
k=2

i=4
j=2
k=1

i=4
j=2
k=2

i=4
j=3
k=1

i=4
j=3
k=2

i=5
j=1
k=1

i=5
j=1
k=2

i=5
j=2
k=1

i=5
j=2
k=2

i=5
j=3
k=1

i=5
j=3
k=2

以上です。

関連コンテンツ

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

繰り返し処理を使ったJavaのソースコードサンプルを紹介しています。

2020.03.23

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

プログラミング、ITに関する用語をまとめています。

2022.10.17

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

繰り返し処理の作り方を解説しています。

2016.03.02

処理を繰り返すために使用するfor文について解説しています。

2020.03.23

処理を繰り返すために使用するdo~while文について解説しています。

2016.02.26

処理を繰り返すために使用するwhile文について解説しています。

2016.01.26

プログラミング言語とは?種類や特徴について説明しています。

2022.08.03

for文で変数名iがよく使われる理由について説明しています。興味のある方は是非。

2022.08.29

指定した基準座標から、指定したマンハッタン距離にある座標に●を描画!

2023.02.15

2値化は、画像処理の1つの方法で、カラー画像を2つ色だけで表現する画像に変換することです。この画像処理をJavaで作ってみませんか?

2016.01.21

2値化は、画像処理の1つの方法で、カラー画像を2つ色だけで表現する画像に変換することです。この記事では、2値の画像メモリを使って変換しています。

2020.10.13

フルカラー(24bit)画像を縦横のサイズを2倍の画像に変換するソースコードを解説します。

2020.03.23

カラーの画像を白・灰色・黒だけで表現した画像に変換する方法を解説しています。Javaのソースコード付きです。

2020.03.23

NTSC 加重平均法を使ったグレースケール変換を紹介しています。Javaのソースコードを使って詳しく解説しています。

2016.01.26

画像全体の画素の色RGBの平均値を計算する方法をソースコードを使って解説しています。

2023.05.04

ソースコードを読みやすくするインデントって?

1つだけ違う文字を目視で探す「文字の間違い探し」をJavaで作成しました。

2020.06.02

画像の一部を切り出して、新しい画像に保存する方法を解説しています。ソースコード付きです。

2023.02.23

フルカラー(24bit)画像を色反転(ネガティブ)画像に変換するソースコードを解説しています。Javaのソースコード付きです。

2020.03.23

同じサイズの円を縦と横方向に同じ間隔で並べて出来る模様の画像を作成する方法を紹介。

2019.06.14

できるだけ隙間がなくなるように円を並べて出来る模様の画像を作成する方法を紹介。

2019.06.17

黒と白の水平線を交互に描画した画像(ストライプ)を作成する方法を解説しています。ソースコード付きです。

2019.02.26

黒と白の垂直線を交互に描画した画像(ストライプ)を作成する方法を解説しています。ソースコード付きです。

2019.02.26

テキストで塗りつぶし円を表現する方法を紹介します。興味のある方は是非ご覧ください。

2020.06.03

テキストで表示される市松模様をJavaで作ってきませんか?サンプルソースを使って、作り方を詳しく説明しています。

2019.03.18

テキストで横縞模様を表現するJavaソースコードを紹介しています。

2020.03.23

広告