Java – if文でループ中の特定の処理を飛ばす方法
Javaでループ中に特定の処理を飛ばすには、if
文とcontinue
文を組み合わせて使用します。
if
文で条件を判定し、条件が真の場合にcontinue
を実行することで、そのループの残りの処理をスキップし、次のループ反復に進みます。
例えば、for
やwhile
ループ内で特定の条件に一致する場合に処理を飛ばしたい場合に有効です。
if文とcontinue文を組み合わせた処理のスキップ方法
Javaにおいて、if
文とcontinue
文を組み合わせることで、ループ内の特定の条件に基づいて処理をスキップすることができます。
これにより、特定の条件を満たす場合にのみ処理を実行し、他の条件では次のループに移行することが可能です。
以下にその実装方法を示します。
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) {
// サンプルデータの作成
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
numbers.add(i); // 1から10までの数字をリストに追加
}
// ループ処理
for (int number : numbers) {
// 偶数の場合は処理をスキップ
if (number % 2 == 0) {
continue; // 偶数をスキップ
}
// 奇数の場合は出力
System.out.println("奇数: " + number);
}
}
}
奇数: 1
奇数: 3
奇数: 5
奇数: 7
奇数: 9
このコードでは、1から10までの数字をリストに格納し、for
ループを使用して各数字を処理しています。
if
文で偶数を判定し、偶数の場合はcontinue
文によって次のループに移行します。
これにより、奇数のみが出力される結果となります。
ループの種類ごとの処理スキップの実装例
Javaには主に3種類のループがあります:for
ループ、while
ループ、do-while
ループ。
それぞれのループにおいて、if
文とcontinue
文を使用して特定の処理をスキップする方法を示します。
以下に各ループの実装例を示します。
1. forループの例
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) {
// サンプルデータの作成
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
numbers.add(i); // 1から10までの数字をリストに追加
}
// forループ処理
for (int number : numbers) {
// 3の倍数の場合は処理をスキップ
if (number % 3 == 0) {
continue; // 3の倍数をスキップ
}
// 出力
System.out.println(" " + number);
}
}
}
1
2
4
5
7
8
10
2. whileループの例
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) {
// サンプルデータの作成
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
numbers.add(i); // 1から10までの数字をリストに追加
}
// whileループ処理
int index = 0;
while (index < numbers.size()) {
int number = numbers.get(index);
// 5より大きい場合は処理をスキップ
if (number > 5) {
index++;
continue; // 5より大きい数字をスキップ
}
// 出力
System.out.println(" " + number);
index++;
}
}
}
1
2
3
4
5
3. do-whileループの例
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) {
// サンプルデータの作成
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
numbers.add(i); // 1から10までの数字をリストに追加
}
// do-whileループ処理
int index = 0;
do {
int number = numbers.get(index);
// 偶数の場合は処理をスキップ
if (number % 2 == 0) {
index++;
continue; // 偶数をスキップ
}
// 出力
System.out.println(" " + number);
index++;
} while (index < numbers.size());
}
}
1
3
5
7
9
これらの例では、各ループの特性を活かしながら、if
文とcontinue
文を使用して特定の条件に基づいて処理をスキップしています。
これにより、必要なデータのみを効率的に処理することができます。
ネストされたループでの処理スキップ
ネストされたループとは、ループの中にさらに別のループが存在する構造のことです。
この場合、内側のループで特定の条件を満たした場合に処理をスキップすることができます。
以下に、ネストされたループでの処理スキップの実装例を示します。
例: 二次元配列の処理
import java.util.Arrays;
public class App {
public static void main(String[] args) {
// 二次元配列の作成
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// ネストされたループ処理
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
// 5の場合は処理をスキップ
if (matrix[i][j] == 5) {
continue; // 5をスキップ
}
// 出力
System.out.println(" " + matrix[i][j]);
}
}
}
}
1
2
3
4
6
7
8
9
このコードでは、二次元配列matrix
を作成し、外側のfor
ループで行を、内側のfor
ループで列を処理しています。
内側のループでif
文を使用して、要素が5の場合にはcontinue
文によってその要素をスキップします。
これにより、5を除いたすべての要素が出力されます。
注意点
continue
文は内側のループにのみ影響を与え、外側のループには影響しません。- ネストされたループを使用する際は、処理の効率を考慮することが重要です。
特に大きなデータセットを扱う場合、無駄な処理を避けるために条件を適切に設定することが求められます。
ラベル付きcontinue文の活用
Javaでは、ラベルを使用して特定のループを指定することができます。
これにより、ネストされたループの中で特定の外側のループに対してcontinue
文を適用することが可能です。
ラベル付きcontinue
文を使用することで、より柔軟な制御が実現できます。
以下にその実装例を示します。
例: ラベル付きcontinue文の使用
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) {
// サンプルデータの作成
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 5; i++) {
numbers.add(i); // 1から5までの数字をリストに追加
}
// ラベル付きループ
outerLoop: // 外側のループにラベルを付ける
for (int i = 0; i < numbers.size(); i++) {
for (int j = 0; j < numbers.size(); j++) {
// 2の倍数の場合は外側のループに戻る
if (numbers.get(i) % 2 == 0) {
System.out.println("偶数: " + numbers.get(i) + " をスキップします。");
continue outerLoop; // 外側のループに戻る
}
// 出力
System.out.println(" " + numbers.get(i) + " と " + numbers.get(j));
}
}
}
}
1 と 1
1 と 2
1 と 3
1 と 4
1 と 5
偶数: 2 をスキップします。
3 と 1
3 と 2
3 と 3
3 と 4
3 と 5
偶数: 4 をスキップします。
このコードでは、1から5までの数字をリストに格納し、外側のfor
ループにouterLoop
というラベルを付けています。
内側のループで、もし外側のループの要素が偶数であれば、continue outerLoop
を使用して外側のループに戻ります。
これにより、偶数の要素は内側のループをスキップし、次の外側のループの要素に移行します。
ラベル付きcontinue文の利点
- 明確な制御: ネストされたループの中で、どのループに対して
continue
を適用するかを明示的に指定できるため、コードの可読性が向上します。 - 柔軟性: 複雑な条件に基づいて、特定のループをスキップすることができるため、より柔軟なロジックを実装できます。
ラベル付きcontinue
文を活用することで、ネストされたループの処理をより効率的に制御することが可能になります。
実践的な使用例
ここでは、if
文とcontinue
文を活用した実践的な使用例を示します。
この例では、ユーザーからの入力を受け取り、特定の条件に基づいて処理をスキップするプログラムを作成します。
具体的には、ユーザーが入力した数値の中から、負の数や特定の値をスキップして、残りの数値の合計を計算します。
例: ユーザー入力による合計計算
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Integer> numbers = new ArrayList<>();
System.out.println("数値を入力してください(終了するには-1を入力):");
// ユーザーからの入力を受け取る
while (true) {
int input = scanner.nextInt();
if (input == -1) {
break; // -1が入力されたら終了
}
numbers.add(input); // 入力された数値をリストに追加
}
int sum = 0;
// 合計計算
for (int number : numbers) {
// 負の数または特定の値(例えば10)の場合は処理をスキップ
if (number < 0 || number == 10) {
continue; // 負の数または10をスキップ
}
sum += number; // 合計に加算
}
System.out.println("合計: " + sum);
scanner.close();
}
}
数値を入力してください(終了するには-1を入力):
5
3
10
-2
7
-1
合計: 15
このプログラムでは、ユーザーが入力した数値をリストに格納し、for
ループを使用して合計を計算しています。
if
文を使って、負の数や特定の値(この例では10)をスキップすることで、合計に含めないようにしています。
これにより、ユーザーが意図しない数値を合計に含めることを防ぎ、正確な結果を得ることができます。
このような処理は、データのフィルタリングや集計を行う際に非常に役立ちます。
特に、ユーザーからの入力を扱うプログラムや、データベースから取得したデータを処理する際に、特定の条件に基づいて処理をスキップすることが求められる場面で活用できます。
まとめ
この記事では、Javaにおけるif
文とcontinue
文を使用して、ループ内の特定の処理をスキップする方法について詳しく解説しました。
特に、ループの種類ごとの実装例やネストされたループでの処理スキップ、ラベル付きcontinue
文の活用方法を通じて、柔軟な制御が可能であることがわかりました。
これらのテクニックを活用することで、より効率的なプログラムを作成し、特定の条件に基づいたデータ処理を行うことができるでしょう。
今後は、実際のプロジェクトや課題において、これらの知識を積極的に応用してみてください。