☜前の章へ 条件分岐(if・else if・switch)
☞次の章へ メソッドの呼び出し方から引数と戻り値まで分かりやすく解説
- ループ処理とは
- ループ処理の書き方(for文・while文・do while文)
- 2重for文・多重ループの書き方
- break文とcontinue文の書き方
- 拡張for文(for-each文)の書き方
- forEachメソッドの書き方
- 無限ループの書き方
ループ処理(繰り返し処理)について学習していきます。
この記事を読めば、普通のループのやり方から2重ループ、無限ループなどができるようになります。
ループ処理とは
ループ処理(または繰り返し処理)は、同じ処理や指定された処理を、繰り返し実行するプログラムのことです。
ループを使用することで、同じ処理や指定された処理を、指定された条件が満たされるまで、繰り返すことができます。
これにより、プログラムが効率的かつ簡潔になります。
ループ処理の書き方(for文・while文・do while文)
Javaでループ処理を行う場合、for文、while文、do while文が基本の書き方になります。
それぞれ同じ処理を繰り返し行えるという点に関しては同じ性質を持ちます。
しかし、書き方など違いもあるのでそれぞれ見ていきましょう。
for文でのループ処理
public class App {
public static void main(String[] args) {
System.out.println("ゲームを開始します。ゲームは10ターンで終了します。");
for(int i = 1; i <= 10; i++) {
System.out.println(i + "ターン目です");
}
System.out.println("ゲームを終了します。");
}
}出力結果

(初期化式 int i = 1; 条件式 i <= 10; 更新式 i++)
- 初期化式では、for文の中でのみ使用できる変数を宣言し初期化します
- 条件式には、ループが終了する条件を書きます。今回は初期化式で初期化した変数iの値が10以下の間ループを続けるという条件にしています
- 更新式には、初期化式で初期化された変数の値を増減させます。今回は1周ごとに変数iを1ずつ加算しています
例えば、今回の例でも出したようにゲームなどでターンが決まっている場合に使うことが出来ます。
while文でのループ処理
public class App {
public static void main(String[] args) {
//初期化式
int i = 5;
System.out.printf("カウントダウン開始\n");
while(i >= 0) {
//ここに何か処理を書く
System.out.println(i);
i--;
}
System.out.println("End");
}
}出力結果

while文はfor文とは違い、()の中に初期化式と更新式は書かず、条件式のみ書きます。
「i- -;」を書かないと無限ループになるので注意してください。
for文でもwhile文でも同じような処理は作れるのですが、while文の場合は主にあらかじめループ回数が決まっていない場合に使われます。
また、while文は特定の条件を満たしている場合にも使用されます。
上記の例は、基本的な書き方の紹介です。
もう少し分かりやすい、あらかじめループ回数が決まっていない場合の例も紹介します。
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = "";
while (!input.equals("yes")) {
// ループ内処理
// ユーザーの入力を待つ
System.out.println("終了しますか?yesまたはnoを入力してください。");
input = scanner.nextLine();
}
// Scannerを閉じる
scanner.close();
}
}出力結果

上記の例では、ユーザーがyesと入力するまでループするという処理になります。
例えば、ループ内処理では次のようなことができます。ユーザーが学校の先生だと想定すると、先生は生徒一人一人の成績を管理するために、全員分の成績を入力していきます。必要な分の入力が終われば、yesを入力して処理を終了します。
このように、あらかじめループ回数が決まっていない場合にwhile文は有効です。
do while文でのループ処理
import java.util.Scanner;
public class App {
public static void main(String[] args) {
int num = 1;
Scanner scan = new Scanner(System.in);
do {
//ループ処理
System.out.println("整数を入力して下さい");
num = scan.nextInt();
} while(num != 1);
scan.close();
System.out.println(num + "が入力されたのでループが終了します");
}
}出力結果

do while文はwhile文と同様に、特定の条件を満たしている間、ループ処理を行います。
do while文とwhile文の違いは、do while文は必ず1回は処理が行われるという特徴があります。
while文は最初に条件判定を行うためループ処理が行われない可能性がありますが、do while文は絶対にループ処理が1回は行われます。
そのためdo while文は1回は絶対にループ処理を行いたい場合に使用されます。
2重for文・多重ループの書き方
2重for文とは、ループの中でループを行うことです。
ループの中にループをいくつでも書けるので多重ループにすることもできます。
public class App {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.printf("i=%d:", i);
for(int j = 1; j <= 10; j++) {
System.out.printf("%d", j);
}
System.out.printf("\n");
}
}
}出力結果

上記の例の場合、外側のループが1周するまでに、内側のループが10周しています。
最終的に外側のループが5周し、内側のループが50周します。
配列に値を代入する時などに使えます。
break文とcontinue文の書き方
break文
public class App {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
if(i == 5) {
break;
}
}
}
}出力結果

iが5の時にループから抜けています。
このようにbreak文を使うとfor文で特定の条件を設定してループから抜けることができます。
while文とdo while文もbreak文を使えばループの途中で抜けることが出来ます。
public class App {
public static void main(String[] args) {
//初期化式
int i = 5;
while(i >= 0) {
System.out.println(i);
if(i ==2) {
break;
}
i--;
}
System.out.println("End");
do {
i++;
System.out.println(i);
if(i == 5) {
break;
}
} while(i <= 10);
System.out.println("End");
}
}出力結果

continue文
public class App {
public static void main(String[] args) {
System.out.println("ゲームを開始します。ゲームは10ターンで終了します。");
for(int i = 1; i <= 10; i++) {
if(i % 2 != 0) {
System.out.println(i + "ターン目:あなたの番です");
continue;
}
System.out.println(i + "ターン目:相手の番です");
}
System.out.println("ゲームを終了します。");
}
}出力結果

上記の例は、if文でiが奇数かを判定し、iが奇数の場合は「あなたの番です」と表示するようにしています。
if文の中にcontinueがあることで「System.out.println(i + “ターン目:相手の番です”);」という処理は飛ばされて、ループ処理が最初から始まります。
このようにcontinue文は後続の処理をスキップする際に使用されます。
拡張for文(for-each文)の書き方|配列・ArrayList
配列はこの後の章で学ぶので、理解できなくても大丈夫です。
拡張for文(for-each文)とは
拡張for文とは、コレクションや配列などの反復可能なオブジェクトを簡潔に処理するための構文のことです。
コレクションとは、複数の要素をまとめて扱うためのデータ構造やインターフェースのことを言います。
拡張for文は、for-each文とも呼ばれます。
似たものにforEachメソッドというものがありますが、拡張for文(for-each文)とは別物なので注意してください。
普通のfor文でも、拡張for文と同じことができるのですが、拡張for文の方が簡潔に書けるというメリットがあります。
拡張for文(for-each文)の書き方
import java.util.ArrayList;
public class App {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
// 拡張for文を使用して配列の要素を順に取り出して処理
for (int number : numbers) {
System.out.println(number);
}
}
}出力結果

配列については9章で解説しますが、このように配列を使ったfor文のことを拡張for文と言います。
配列numbersの要素をループごとに1つずつ変数numberに代入し、表示させています。
ArrayListを使った拡張for文も確認してみましょう
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// 拡張for文を使用してリストの要素を順に取り出して処理
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}出力結果

ArrayListの場合も、拡張for文の書き方は配列と変わりません。
リストの要素を1つ1つ取り出すことができます。
forEachメソッドの書き方
メソッドはこの後の章で学ぶので、理解できなくても大丈夫です。
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.forEach(item -> System.out.println(item));
}
}出力結果

forEachメソッドは次のソースコードが該当します。
fruits.forEach(item -> System.out.println(item));「item -> System.out.println(item)」の部分はラムダ式と言い、構文になっています。
パラメータである変数itemが、変数fruitsの値を順番に受け取り、順番に表示しています。
無限ループの書き方
VSCODEで無限ループの処理が止まらなくなった場合はターミナルを選択した状態で「Ctrl + C」で止めてください。またはターミナルにあるゴミ箱のようなアイコンから強制終了してください。
無限ループが発生してもパソコンは壊れないので安心してください。
for文での無限ループ
public class App {
public static void main(String[] args) {
for (int i = 0;; i++) {
System.out.println(i);
}
}
}出力結果

for文では条件式を書かなければ無限ループにすることができます。
while文での無限ループ
public class App {
public static void main(String[] args) {
int i = 1;
while (i < 5) {
System.out.println(i);
}
}
}出力結果

while文ではループ処理内で条件式を満たすような処理を書かなければ無限ループにすることができます。
do while文での無限ループ
public class App {
public static void main(String[] args) {
int i = 1;
do {
System.out.println(i);
} while(i < 5);
}
}出力結果

do while文もwhile文と同様に、ループ処理内で条件式を満たすような処理を書かなければ無限ループにすることができます。
練習問題
コンソールにループ処理で次のように表示しましょう
123456789
public class App {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
System.out.print(i);
}
System.out.println(); // 改行
}
}出力結果

3回ループさせて、ループごとにyesかnoで解答できるクイズを作成しましょう
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String userAnswer;
for (int i = 0; i <= 2; i++) {
switch (i) {
case 0:
System.out.println("マリオの帽子は赤色?yesまたはnoを入力してください。");
userAnswer = scanner.next().toLowerCase();
if (userAnswer.equals("yes")) {
System.out.println("正解!");
} else {
System.out.println("残念...マリオの帽子は赤色です。");
}
break;
case 1:
System.out.println("マリオの弟の名前はポワール?yesまたはnoを入力してください。");
userAnswer = scanner.next().toLowerCase();
if (userAnswer.equals("yes")) {
System.out.println("残念...マリオの弟の名前はルイージです。");
} else {
System.out.println("正解!");
}
break;
case 2:
System.out.println("マリオの最大の敵の名前はカッパ?yesまたはnoを入力してください。");
userAnswer = scanner.next().toLowerCase();
if (userAnswer.equals("yes")) {
System.out.println("残念...マリオの最大の敵の名前はクッパです。");
} else {
System.out.println("正解!");
}
break;
default:
break;
}
}
scanner.close();
}
}出力結果

コンソールに次のように表示しましょう
123456789
123456789
123456789
public class App {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
for (int j = 1; j <= 9; j++) {
System.out.print(j);
}
System.out.println();
}
}
}出力結果

☜前の章へ 条件分岐(if・else if・switch)
☞次の章へ メソッドの呼び出し方から引数と戻り値まで分かりやすく解説

