【初心者用】Javaのループ処理についてまとめてみた
公開日: 2022/8/19
更新日: 2022/8/19
ループ処理とは、ループ(繰り返し)の名前の通り、同じ処理を繰り返し実行させる処理のことです。
全く同じ処理を繰り返させるだけであれば、大した仕事はできないのですが、ループ処理の中で変数の値を変化させたり、ループ処理の中にさらにループ処理を加えて入れ子にしてみたりすることで、複雑な処理をこなせるようになります。
今回は、Javaで使われるループ処理について、以下の4種類の文法を調べたので、それらについて説明していきたいと思います。
全く同じ処理を繰り返させるだけであれば、大した仕事はできないのですが、ループ処理の中で変数の値を変化させたり、ループ処理の中にさらにループ処理を加えて入れ子にしてみたりすることで、複雑な処理をこなせるようになります。
今回は、Javaで使われるループ処理について、以下の4種類の文法を調べたので、それらについて説明していきたいと思います。
1. for文
for文は、主に決められた回数だけ繰り返し処理を行いたい時に利用されます。
基本的な構成は、以下のようになります。
これだけだと抽象的すぎるので、以下に具体例を載せてみます。
上記は、指定した回数だけ「Hello!」を吐き出させ続けるだけの処理です。
結果は、以下のようになります。
解説しますと、for文では、
・「初期化式」に対し、
・ループ1週ごとに「変化式」を行い、
・ループさせたい処理を、「継続条件式」を満たす限り繰り返せ
という命令を出しています。
上記の具体例で表すと、以下のようになります。
・初期値0のint型の変数「cnt」に対し、
・ループ1周ごとに1加算しつつ(「++」は1加算という意味です)
・画面に「Hello!」と表示させる処理を、cntが5未満である限り、繰り返せ
という意味になります。
つまり、変数「cnt」が0~4の間、5回分「Hello!」を表示させていたわけですね。
このように、for文は、繰り返す回数が明確に決まっている場合にのみ、使用されます。
ループ回数については、変数を用いることもできるため、配列の要素数分ループさせ、配列の中身を1つ1つ参照させたい、という時にも有効です。
基本的な構成は、以下のようになります。
- for(初期化式;継続条件式;変化式){
- //ループさせたい処理
- ...
- }
これだけだと抽象的すぎるので、以下に具体例を載せてみます。
- public class forEx {
- public static void main(String[] args) {
- for (int cnt = 0; cnt < 5; cnt++){
- System.out.println("Hello!");
- }
- }
- }
上記は、指定した回数だけ「Hello!」を吐き出させ続けるだけの処理です。
結果は、以下のようになります。
解説しますと、for文では、
・「初期化式」に対し、
・ループ1週ごとに「変化式」を行い、
・ループさせたい処理を、「継続条件式」を満たす限り繰り返せ
という命令を出しています。
上記の具体例で表すと、以下のようになります。
・初期値0のint型の変数「cnt」に対し、
・ループ1周ごとに1加算しつつ(「++」は1加算という意味です)
・画面に「Hello!」と表示させる処理を、cntが5未満である限り、繰り返せ
という意味になります。
つまり、変数「cnt」が0~4の間、5回分「Hello!」を表示させていたわけですね。
このように、for文は、繰り返す回数が明確に決まっている場合にのみ、使用されます。
ループ回数については、変数を用いることもできるため、配列の要素数分ループさせ、配列の中身を1つ1つ参照させたい、という時にも有効です。
2. 拡張for文(for-each文)
拡張for文とは、配列やコレクション(大きさが決まっていない配列のようなオブジェクト)といった複数の要素を含むオブジェクトの全要素に対し、順番に処理を行うために使われます。
基本的な文法は、以下のようになります。
具体例と実行結果は、以下のようになります。
某海産物一家の名前を順に表示させるだけの処理です。
解説しますと、拡張for文は以下のようになります。
※()内は、上に挙げた具体例のものです。
・宣言した変数(str)に配列(sName)を入れ、
・配列数分処理(;System.out.println(str))を行え
for文との違いを述べるとすると、for文に対し、拡張for文は配列の要素を指定できない(そのループ時の要素のみ)という短所がありますが、記述内容をシンプルにしやすい、つまりは可読性の向上を見込めるという点で優れているとされています。
基本的な文法は、以下のようになります。
- for (データ型 変数:配列){
- //ループさせたい処理
- }
具体例と実行結果は、以下のようになります。
某海産物一家の名前を順に表示させるだけの処理です。
- public class forEx {
- public static void main(String[] args) {
- String[] sName = {"ナミヘイ","フネ","サザエ","マスオ","カツオ","ワカメ","タラ","タマ"};
- for (String str: sName){
- System.out.println(str);
- }
- }
- }
解説しますと、拡張for文は以下のようになります。
※()内は、上に挙げた具体例のものです。
・宣言した変数(str)に配列(sName)を入れ、
・配列数分処理(;System.out.println(str))を行え
for文との違いを述べるとすると、for文に対し、拡張for文は配列の要素を指定できない(そのループ時の要素のみ)という短所がありますが、記述内容をシンプルにしやすい、つまりは可読性の向上を見込めるという点で優れているとされています。
3. while文
while文は、「条件を満たす限り繰り返させる」ループ処理です。
for文との違いとして、こちらはカウントを行いません。(似た動作は可能です)
基本的な文法は以下になります。
具体例と、その結果は以下になります。
処理の内容としては、元の1,100日から、1年分の日数(365日)を引き続けながら、都度表示させる処理を日数が0以上である限りループさせたものとなっております。
解説しますと、while文は以下のように読み下せます。
※()内は、上に挙げた具体例のものです。
・「継続条件」( iDays >= 0)が正である限り、
・ループ処理(残り日数を表示させ、1年分の日数を引く処理)を繰り返させる
前述したように、while文はfor文のようにカウントを行わないので、明確な回数が決まっていないループ処理を行うのに向いています。
for文との違いとして、こちらはカウントを行いません。(似た動作は可能です)
基本的な文法は以下になります。
- while(継続条件式){
- //ループさせたい処理
- }
具体例と、その結果は以下になります。
処理の内容としては、元の1,100日から、1年分の日数(365日)を引き続けながら、都度表示させる処理を日数が0以上である限りループさせたものとなっております。
- public class whiEx {
- public static void main(String[] args) {
- int iDays = 1100;
-
- while ( iDays >= 0 ){
- System.out.println(iDays);
- iDays = iDays - 365;
- }
- }
- }
解説しますと、while文は以下のように読み下せます。
※()内は、上に挙げた具体例のものです。
・「継続条件」( iDays >= 0)が正である限り、
・ループ処理(残り日数を表示させ、1年分の日数を引く処理)を繰り返させる
前述したように、while文はfor文のようにカウントを行わないので、明確な回数が決まっていないループ処理を行うのに向いています。
4. do-while文
do-while文は、while文と同様に「条件を満たす限り繰り返させる」ループ処理です。
基本的な文法は、以下になります。
具体例と、その結果は以下になります。
処理の内容としては、while文の例と同じく、元の1,100日から、1年分の日数(365日)を引き続けながら、都度表示させる処理を日数が0以上である限りループさせたものとなっております。
解説しますと、while文は以下のように読み下せます。
※()内は、上に挙げた具体例のものです。
・ループ処理(残り日数を表示させ、1年分の日数を引く処理)を行い、
・「継続条件」( iDays >= 0)が正である限り、これを繰り返させる。
読み下し文は、while文のものを前後逆に置き換えただけのよう
基本的な文法は、以下になります。
- do{
- //ループさせたい処理
- }while(継続条件式)
具体例と、その結果は以下になります。
処理の内容としては、while文の例と同じく、元の1,100日から、1年分の日数(365日)を引き続けながら、都度表示させる処理を日数が0以上である限りループさせたものとなっております。
- public class whiEx {
- public static void main(String[] args) {
- int iDays = 1100;
- do{
- System.out.println(iDays);
- iDays = iDays - 365;
- }while ( iDays >= 0 );
- }
- }
解説しますと、while文は以下のように読み下せます。
※()内は、上に挙げた具体例のものです。
・ループ処理(残り日数を表示させ、1年分の日数を引く処理)を行い、
・「継続条件」( iDays >= 0)が正である限り、これを繰り返させる。
読み下し文は、while文のものを前後逆に置き換えただけのよう