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 ( 外側の初期化式; 外側の継続条件式;外側の変化式 ) { for ( 内側の初期化式; 内側の継続条件式;内側の変化式 ) { 処理文1 処理文2 : } }
for ( 初期化式1; 継続条件式1; 変化式1 ) { for ( 初期化式2; 継続条件式2; 変化式2 ) { for ( 初期化式3; 継続条件式3; 変化式3 ) { 処理文1 処理文2 : } } }
for ( 外側の初期化式; 外側の継続条件式;外側の変化式 ) { for ( 内側1の初期化式; 内側1の継続条件式;内側1の変化式 ) { 処理文1 処理文2 : } for ( 内側2の初期化式; 内側2の継続条件式;内側2の変化式 ) { 処理文1 処理文2 : } }
for ( 外側の初期化式; 外側の継続条件式;外側の変化式 ) { // 2重ループ for ( 内側1の初期化式; 内側1の継続条件式;内側1の変化式 ) { for ( 内側2の初期化式; 内側2の継続条件式;内側2の変化式 ) { 処理文1 処理文2 : } } // 1重ループ for ( 内側3の初期化式; 内側3の継続条件式;内側3の変化式 ) { 処理文1 処理文2 : } }
Javaソースコード - 2重ループ
以下の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
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重ループ
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
以上です。
関連コンテンツ
2値化は、画像処理の1つの方法で、カラー画像を2つ色だけで表現する画像に変換することです。この記事では、2値の画像メモリを使って変換しています。
2020.10.13
ソースコードを読みやすくするインデントって?
このサイトのオリジナルクラスのMyBufferedImage0クラスを利用して、フルカラーの画像をセピア色に変換してをJPEGG形式のファイルに保存するプログラムを紹介しています。
2023.07.16