Javaを勉強し始めると必ず学ぶことになるのがwhile文です。
これを知っているのと知っていないのとではコード記載スピード、美しさといった点で雲泥の差が出てきます。
今回はぜひwhile文についての理解を深めて効率的なコードの記載が行えるようになってください。
while文での2重ループの方法
まず通常のwhileの使用方法ですが、以前下記の記事で簡単にご紹介いたしましたので、今回は2重ループについて解説していきます。
【Java】ループの方法 | エンジニアKISARAGIの備忘録 (kisaragi-it.com)
まず2重ループとは読んで字のごとくwhile文を2個使用するというものです。
2重ループはどのような時に使用するかというと、2次元配列を使用する際などに使うことがあります。
では実際のコード例とその実行結果を基に解説していきます。
【使用方法】
public class ex {
public static void main(String[] args) {
String a[][]= {{"日本","中国","韓国"},{"イギリス","フランス","ドイツ"},{"南アフリカ","エジプト","エチオピア"}};
int i=0;
int j=0;
while(i<3){
while(j<3) {
System.out.println(a[i][j]);
j++;
}
j=0;
i++;
}
}
}
【実行結果】
日本
中国
韓国
イギリス
フランス
ドイツ
南アフリカ
エジプト
エチオピア
上記は2次元配列に代入されている地域ごとの国名を順番に出力していくというものです。
上記の処理を流れで記載すると下記のようになります。
①i=0、j=0の状態で1つ目のwhile文に入る
②i=0、j=0の状態で2つ目のwhile文に入る
③まずa[0][0]に入っているデータ「日本」を出力する
④jを+1してj=1となる
⑤ループで2つ目のwhile文に戻り「1<3」という条件のためまだ2つ目のwhile文は抜けない
⑥a[0][1]に入っているデータ「中国」を出力する
⑦jを+1してj=2となる
⑧ループで2つ目のwhile文に戻り「2<3」という条件のためまだ2つ目のwhile文は抜けない
⑨a[0][2]に入っているデータ「韓国」を出力する
⑩jを+1してj=3となる
⑪ループで2つ目のwhile文に戻り「3<3」という条件のため2つ目のwhile文を抜ける
⑫j=0として初期化する
⑬iを+1してi=1となる
⑭i=1、j=0の状態で「1<3」という条件のため1つ目のwhile文からはまだ抜けない
⑮以降は②~⑭の操作を繰り返して、最後1つ目のwhile文も条件を満たさなくなるためwhile文から抜けて処理が終了となる
以上が2重で記載したwhile文の処理となっています。
今回のコードで気を付けてほしい点はi,jの値を順番に+1していく点と、jの値を0で初期化する点です。
i,jの値を+1していかないと無限ループとなってしまいます。
そしてjの値を0で初期化するというのは2つ目のwhile文が完了後にこれを実施しておかないと、以降2つ目のwhile文の条件である「j<3」を満たさなくなるため、必ず初期化してループ条件を満たす必要があります。
do-while文の使用方法
次に解説するのはdo-while文というものです。
これはループ条件を最後に記載するというやり方です。
構文は下記の通りとなります。
do {
繰り返し実施する処理
} while(ループ条件);
最後にループ条件を記載するため、初めてwhile文に入るときにはどのような条件であろうと一度は処理を実施するようになっています。
例えば下記例文と実行結果を見てみてください。
【使用方法】
public class ex2 {
public static void main(String[] args) {
int a=100;
do {
System.out.println(a);
} while(a<50);
}
}
【実行結果】
100
上記コードは「a<50」という条件の間繰り返し文を実施するというものとなっていますが、aは初めから100となっています。
そして結果は「a<50」という条件を満たさないにもかかわらず100という値を出力しています。
このように条件は満たしてほしいが、最初の値だけは処理してほしいなどの特定条件下で使用したい場合に活躍するwhile文となっています。
ラベルの使用について
最後に開設するのはラベルについてです。
以前下記記事で少し解説したbreak文やcontinue文がありましたが、ラベルを使用することでこれらの機能の汎用性を底上げしてくれます。
【Java】if文での条件分岐を徹底解説 | エンジニアKISARAGIの備忘録 (kisaragi-it.com)
ラベルの機能としてはbreak文やcontinue文を使用した際の移動先を自由に指定することができるというものです。
実際のコードで見ていってみましょう。
【使用方法】
public class ex3 {
public static void main(String[] args) {
String a[][]= {{"日本","中国","韓国"},{"イギリス","フランス","ドイツ"},{"南アフリカ","エジプト","エチオピア"}};
int i=0;
int j=0;
b:
while(i<3){
while(j<3) {
System.out.println(a[i][j]);
j++;
if(j == 2) {
break b;
}
}
j=0;
i++;
}
}
}
【実行結果】
日本
中国
上記コードはjが2となった場合にwhile文を2つとも抜けるというものです。
「break b;」となっているところで「b:」というところのループを抜けるという処理となっています。
これを使用することで通常ならbreak文で1つのループしか抜け出せませんが、2重ループだろうと簡単に抜け出すことができます。
今回はループを抜け出すのに使用しましたが、他にもif文やswitch文、return文などにも付与することが可能となっています。
まとめ
この記事ではwhile文について下記項目で解説してきました。
- while文での2重ループの方法
- do-while文の使用方法
- ラベルの使用について
whileを効率的に使用することで作業時間の短縮になり、コード量が減り、見やすいコードとなります。
ぜひどんどんwhile文を使用して、使いこなせるようになっていきましょう。
以上で今回の解説は終了となります。
コメント