[Java] continueを使わないでループ処理の一部を飛ばす方法

Javaでcontinueを使わずにループ処理の一部を飛ばす方法として、if文を使用して条件に合致する場合にその後の処理をスキップする方法があります。

具体的には、ループ内で条件をチェックし、該当する場合はif文の中で処理を行わず、elseブロックで通常の処理を行うことで、continueと同様の効果を得ることができます。

この記事でわかること
  • continueを使わずにスキップする方法
  • if文やreturn文の活用法
  • フラグ変数による条件分岐の実装
  • ネストされたループでのスキップ処理
  • スキップ処理をメソッドに分離する利点

目次から探す

continueを使わずにループ処理をスキップする方法

Javaにおいて、ループ処理を行う際に特定の条件を満たす場合に処理をスキップしたいことがあります。

通常はcontinue文を使用しますが、他にもさまざまな方法でループの一部を飛ばすことができます。

ここでは、if文、return文、break文、フラグ変数を使った方法について解説します。

if文を使った条件分岐によるスキップ

if文を使用することで、特定の条件を満たす場合に処理をスキップすることができます。

以下のサンプルコードでは、配列の要素が偶数の場合にその処理をスキップしています。

import java.util.Arrays;
public class App {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        
        for (int number : numbers) {
            // 偶数の場合はスキップ
            if (number % 2 == 0) {
                continue; // ここは実際には使わない
            }
            System.out.println(number);
        }
    }
}
1
3
5

このコードでは、if文を使って偶数をスキップする条件を設定しています。

continue文は実際には使わず、条件に合致した場合に何も処理を行わないようにしています。

return文を使ったスキップ方法(メソッド内でのループ)

メソッド内でループ処理を行う場合、return文を使ってスキップすることも可能です。

以下のサンプルコードでは、特定の条件を満たす場合にメソッドから早期に戻ることで、ループの処理をスキップしています。

import java.util.Arrays;
public class App {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        processNumbers(numbers);
    }
    public static void processNumbers(int[] numbers) {
        for (int number : numbers) {
            // 偶数の場合はメソッドを終了
            if (number % 2 == 0) {
                return; // ここでメソッドを終了
            }
            System.out.println(number);
        }
    }
}
1

このコードでは、偶数が見つかった時点でreturn文によりメソッドを終了し、以降の処理をスキップしています。

break文との違いと使い分け

break文はループ全体を終了させるため、特定の条件でループをスキップしたい場合には適していません。

以下の表に、continuebreakreturnの違いを示します。

スクロールできます
文の種類処理の影響範囲使用例
continue次のループへ進む特定の条件で処理をスキップ
breakループを終了条件を満たしたらループを抜ける
returnメソッドを終了条件を満たしたらメソッドを抜ける

このように、continueは次のループに進むために使用し、breakはループを完全に終了させるために使用します。

returnはメソッド全体を終了させるため、ループ内での使用には注意が必要です。

フラグ変数を使ったスキップ方法

フラグ変数を使用することで、特定の条件を満たす場合に処理をスキップすることができます。

以下のサンプルコードでは、フラグ変数を使って偶数が見つかった場合にスキップする処理を実装しています。

import java.util.Arrays;

public class App {
    public static void main(String[] args) {
        int[] numbers = { 1, 2, 3, 4, 5 };
        boolean skip = false; // フラグ変数
        for (int number : numbers) {
            // 偶数の場合はフラグを立てる
            if (number % 2 == 0) {
                skip = true;
            } else {
                skip = false;
            }
            if (skip) {
                continue; // フラグが立っている場合はスキップ
            }
            System.out.println(number);
        }
    }
}
1
3
5

このコードでは、偶数が見つかった場合にフラグ変数skiptrueに設定し、その後のループでスキップする処理を行っています。

フラグ変数を使うことで、より柔軟な条件分岐が可能になります。

実際のコード例

ここでは、if文、return文、フラグ変数を使ったスキップ方法、そしてネストされたループでのcontinueの代替方法について具体的なコード例を示します。

これにより、実際の使用方法を理解しやすくなります。

if文を使ったcontinueの代替例

以下のサンプルコードでは、if文を使用して偶数をスキップする処理を実装しています。

continue文は使用せず、条件に合致した場合は何も出力しないようにしています。

import java.util.Arrays;
public class App {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        
        for (int number : numbers) {
            // 偶数の場合はスキップ
            if (number % 2 == 0) {
                // 何もしない
            } else {
                System.out.println(number);
            }
        }
    }
}
1
3
5

このコードでは、偶数の場合は何も出力せず、奇数のみを出力しています。

return文を使ったスキップ例

次に、メソッド内でreturn文を使ってスキップする例を示します。

特定の条件を満たす場合にメソッドを終了させることで、ループの処理をスキップします。

import java.util.Arrays;
public class App {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        processNumbers(numbers);
    }
    public static void processNumbers(int[] numbers) {
        for (int number : numbers) {
            // 偶数の場合はメソッドを終了
            if (number % 2 == 0) {
                return; // メソッドを終了
            }
            System.out.println(number);
        }
    }
}
1

このコードでは、最初の偶数が見つかった時点でメソッドが終了し、それ以降の処理は行われません。

フラグ変数を使ったスキップ例

フラグ変数を使用して、特定の条件を満たす場合に処理をスキップする方法を示します。

以下のサンプルコードでは、偶数が見つかった場合にフラグを立ててスキップします。

public class App {
    public static void main(String[] args) {
        int[] numbers = { 1, 2, 3, 4, 5 };
        boolean skip = false; // フラグ変数
        for (int number : numbers) {
            // 偶数の場合はフラグを立てる
            if (number % 2 == 0) {
                skip = true;
            } else {
                skip = false;
            }
            if (skip) {
                // フラグが立っている場合はスキップ
                continue;
            }
            System.out.println(number);
        }
    }
}
1
3
5

このコードでは、偶数が見つかるとフラグが立ち、その後のループでスキップされます。

ネストされたループでのcontinue代替方法

ネストされたループにおいても、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[] row : matrix) {
            for (int number : row) {
                // 偶数の場合はスキップ
                if (number % 2 == 0) {
                    // 何もしない
                } else {
                    System.out.print(number + " ");
                }
            }
            System.out.println(); // 行の終わりで改行
        }
    }
}
1 3 
5 
7 9

このコードでは、内側のループで偶数をスキップし、奇数のみを出力しています。

continue文を使用せずに、条件に合致した場合は何も出力しないようにしています。

応用例

ここでは、複数条件でのスキップ処理、配列やリストの要素をスキップする場合、ネストされたループでのスキップ処理、そしてスキップ処理をメソッドに分離する方法について具体的なコード例を示します。

これにより、さまざまなシチュエーションでのスキップ処理の実装方法を理解できます。

複数条件でのスキップ処理

複数の条件を使ってスキップ処理を行うことができます。

以下のサンプルコードでは、偶数または3の倍数の場合に処理をスキップしています。

import java.util.Arrays;
public class App {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        
        for (int number : numbers) {
            // 偶数または3の倍数の場合はスキップ
            if (number % 2 == 0 || number % 3 == 0) {
                // 何もしない
            } else {
                System.out.println(number);
            }
        }
    }
}
1
5
7

このコードでは、偶数または3の倍数でない数値のみを出力しています。

配列やリストの要素をスキップする場合

配列やリストの要素をスキップする場合も、同様の方法で実装できます。

以下のサンプルコードでは、リストの要素をスキップする例を示します。

import java.util.ArrayList;
import java.util.List;
public class App {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
        
        for (int number : numbers) {
            // 偶数の場合はスキップ
            if (number % 2 == 0) {
                // 何もしない
            } else {
                System.out.println(number);
            }
        }
    }
}
1
3
5
7
9

このコードでは、リスト内の偶数をスキップし、奇数のみを出力しています。

ネストされたループでのスキップ処理

ネストされたループでもスキップ処理を行うことができます。

以下のサンプルコードでは、2次元配列の要素をスキップする例を示します。

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[] row : matrix) {
            for (int number : row) {
                // 偶数の場合はスキップ
                if (number % 2 == 0) {
                    // 何もしない
                } else {
                    System.out.print(number + " ");
                }
            }
            System.out.println(); // 行の終わりで改行
        }
    }
}
1 3 
5 
7 9

このコードでは、2次元配列の偶数をスキップし、奇数のみを出力しています。

スキップ処理をメソッドに分離する方法

スキップ処理をメソッドに分離することで、コードの可読性を向上させることができます。

以下のサンプルコードでは、スキップ処理を別のメソッドに分けています。

import java.util.Arrays;
public class App {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        processNumbers(numbers);
    }
    public static void processNumbers(int[] numbers) {
        for (int number : numbers) {
            if (shouldSkip(number)) {
                // スキップする場合は何もしない
                continue;
            }
            System.out.println(number);
        }
    }
    public static boolean shouldSkip(int number) {
        // 偶数の場合はスキップ
        return number % 2 == 0;
    }
}
1
3
5
7
9

このコードでは、shouldSkipメソッドを使用して、偶数をスキップする条件を定義しています。

これにより、メインの処理がシンプルになり、条件の変更も容易になります。

よくある質問

continueとif文の違いは何ですか?

continue文とif文は、ループ処理において異なる役割を持っています。

continue文は、ループの現在の反復を終了し、次の反復に進むために使用されます。

一方、if文は条件を評価し、その条件が真である場合に特定の処理を実行するために使用されます。

以下にそれぞれの特徴を示します。

  • continue文: ループの次の反復に進む。
  • if文: 条件に基づいて処理を実行するかどうかを決定する。

return文を使うとループが終了してしまうのでは?

はい、return文を使用すると、現在のメソッドが終了します。

したがって、return文がループ内で実行されると、そのループだけでなく、メソッド全体が終了してしまいます。

これにより、ループの残りの部分は実行されず、次の反復や後続の処理は行われません。

return文は、特定の条件を満たした場合にメソッドを早期に終了させたい場合に使用されます。

フラグ変数を使うとパフォーマンスに影響がありますか?

フラグ変数を使用すること自体がパフォーマンスに大きな影響を与えることは通常ありません。

ただし、フラグ変数を使うことで条件分岐が増える場合、特にネストされたループや複雑な条件がある場合には、可読性が低下し、メンテナンスが難しくなることがあります。

パフォーマンスに影響を与えるのは、フラグ変数の使用そのものではなく、フラグを使った条件分岐の複雑さや、ループの回数が多い場合です。

適切に使用すれば、フラグ変数はコードの可読性を向上させる助けになります。

まとめ

この記事では、Javaにおけるループ処理の一部をスキップする方法について、continue文を使わずに実現するさまざまな手法を紹介しました。

具体的には、if文やreturn文、フラグ変数を用いた方法、さらにはネストされたループでのスキップ処理についても触れました。

これらのテクニックを活用することで、より柔軟で可読性の高いコードを書くことが可能になりますので、ぜひ実際のプログラミングに取り入れてみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • 繰り返し処理 (7)
  • 条件分岐 (1)
  • URLをコピーしました!
目次から探す