Java で配列が正の数のみを含むかどうかをチェックする方法

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java で配列が正の数のみを含んでいるかどうかをチェックする方法を学びます。これを達成するためのさまざまなアプローチを探ります。まずは、ループを使って配列を反復処理し、各要素を個別にチェックする基本的な方法から始めます。

基本的なループ方法の後、Java Stream API の使用について詳しく調べます。これは、コレクションを処理するためのより最新かつ簡潔な方法です。最後に、配列が正の値のみを含んでいるかどうかを判断する文脈で、ゼロと負の数をどのように扱うかについて議論します。この実験では、Java での配列操作と条件ロジックに関する実践的なスキルを身につけることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/DataStructuresGroup -.-> java/arrays("Arrays") java/ProgrammingTechniquesGroup -.-> java/lambda("Lambda") java/FileandIOManagementGroup -.-> java/stream("Stream") subgraph Lab Skills java/if_else -.-> lab-559999{{"Java で配列が正の数のみを含むかどうかをチェックする方法"}} java/for_loop -.-> lab-559999{{"Java で配列が正の数のみを含むかどうかをチェックする方法"}} java/arrays -.-> lab-559999{{"Java で配列が正の数のみを含むかどうかをチェックする方法"}} java/lambda -.-> lab-559999{{"Java で配列が正の数のみを含むかどうかをチェックする方法"}} java/stream -.-> lab-559999{{"Java で配列が正の数のみを含むかどうかをチェックする方法"}} end

配列をループして正の数をチェックする

このステップでは、Java で数値の配列を反復処理し、各数値が正の数であるかどうかをチェックする方法を学びます。これはプログラミングにおける基本的な操作で、データのコレクションを処理することができます。

まず、~/project ディレクトリに PositiveCheck.java という名前の新しい Java ファイルを作成しましょう。左側のファイルエクスプローラーで右クリックし、「新しいファイル」を選択してから PositiveCheck.java と入力することで作成できます。

次に、エディタで PositiveCheck.java ファイルを開き、以下のコードを追加します。

public class PositiveCheck {

    public static void main(String[] args) {
        // Define an array of integers
        int[] numbers = {10, -5, 20, 0, 15, -8};

        // Loop through the array
        for (int i = 0; i < numbers.length; i++) {
            // Get the current number
            int currentNumber = numbers[i];

            // Check if the number is positive
            if (currentNumber > 0) {
                System.out.println(currentNumber + " is a positive number.");
            }
        }
    }
}

このコードを分解して説明しましょう。

  • public class PositiveCheck: これはクラスを宣言しており、ファイル名と一致しています。
  • public static void main(String[] args): これはプログラムの実行が開始されるメインメソッドです。
  • int[] numbers = {10, -5, 20, 0, 15, -8};: この行は numbers という名前の整数型の配列を宣言し、いくつかの値で初期化しています。配列は同じデータ型の要素のコレクションです。
  • for (int i = 0; i < numbers.length; i++): これは for ループです。これはコードブロックを複数回繰り返すことができる制御構造です。
    • int i = 0: これはカウンタ変数 i を 0 に初期化します。
    • i < numbers.length: これは各反復の前にチェックされる条件です。inumbers 配列の長さより小さい限り、ループは続きます。numbers.length は配列内の要素の数を返します。
    • i++: これは各反復の後にカウンタ i を 1 増やします。
  • int currentNumber = numbers[i];: ループ内で、この行は numbers 配列の現在のインデックス i の要素にアクセスし、それを currentNumber という変数に格納します。配列のインデックスは 0 から始まります。
  • if (currentNumber > 0): これは if 文です。currentNumber が 0 より大きいかどうかをチェックします。
  • System.out.println(currentNumber + " is a positive number.");: この行は if 条件が真の場合(つまり、数値が正の数である場合)のみ実行されます。正の数と「is a positive number.」というテキストを出力します。

PositiveCheck.java ファイルを保存しましょう(Ctrl+S または Cmd+S)。

次に、ターミナルでこのプログラムをコンパイルして実行しましょう。~/project ディレクトリにいることを確認してください。

コードをコンパイルします。

javac PositiveCheck.java

エラーがなければ、PositiveCheck.class ファイルが作成されます。

次に、コンパイルされたコードを実行します。

java PositiveCheck

配列内の正の数のみが表示される出力が表示されるはずです。

10 is a positive number.
20 is a positive number.
15 is a positive number.

これは、for ループを使用して配列を反復処理し、各要素に条件を適用する方法を示しています。次のステップでは、Java の Stream API を使用して同様の結果を達成するより最新の方法を探ります。

Stream API を使用して正の数を処理する

このステップでは、Java でコレクションを処理するための、より最新で簡潔な方法である Stream API を探ります。Java 8 で導入された Stream は、データのコレクションに対してフィルタリング、マッピング、集約などの操作を行う強力な手段を提供します。

前の例を Stream を使って修正し、配列内の正の数を見つけるようにしましょう。

エディタで再度 PositiveCheck.java ファイルを開き、既存のコードを以下のコードに置き換えます。

import java.util.Arrays;

public class PositiveCheck {

    public static void main(String[] args) {
        // Define an array of integers
        int[] numbers = {10, -5, 20, 0, 15, -8};

        // Use Stream API to filter and print positive numbers
        Arrays.stream(numbers) // 1. Create a stream from the array
              .filter(number -> number > 0) // 2. Filter for positive numbers
              .forEach(number -> System.out.println(number + " is a positive number (Stream).")); // 3. Process each positive number
    }
}

このコードの新しい部分を見てみましょう。

  • import java.util.Arrays;: Arrays クラスの stream() メソッドを使用するために、このクラスをインポートする必要があります。
  • Arrays.stream(numbers): この行は int 型の配列を IntStream に変換します。Stream 自体はデータ構造ではなく、処理できる要素のシーケンスです。
  • .filter(number -> number > 0): これは Stream 上の中間操作です。filter() メソッドは Predicate(真または偽を返す関数)を受け取り、述語が真となる要素のみを残します。ここで、number -> number > 0 はラムダ式で、関数を簡潔に記述する方法です。Stream 内の各 number が 0 より大きいかどうかをチェックします。
  • .forEach(number -> System.out.println(number + " is a positive number (Stream)."));: これは終端操作です。終端操作は Stream を消費し、結果を生成します。forEach() メソッドは Stream 内の各要素に対してアクションを実行します。ここでは、各正の数とメッセージを出力します。

PositiveCheck.java ファイルを保存します。

次に、ターミナルで修正したプログラムをコンパイルして実行します。

javac PositiveCheck.java
java PositiveCheck

以前と同じ出力が表示されますが、メッセージが更新されています。

10 is a positive number (Stream).
20 is a positive number (Stream).
15 is a positive number (Stream).

これは、Stream API を使用して、従来の for ループと同じ結果を達成できることを示しています。特に複雑な操作の場合、Stream API を使ったコードはより読みやすく表現力があります。

ゼロと負の数を扱う

前のステップでは、正の数を識別することに焦点を当てました。今度は、プログラムを拡張して、ゼロと負の数も識別できるようにしましょう。これにより、配列内の数値全体の状況を把握することができます。

まず、従来の for ループを使ったアプローチで、PositiveCheck.java ファイルを再度修正して、ゼロと負の数のチェックを追加します。if-else if-else 文を使った条件分岐のロジックは理解しやすいからです。

エディタで PositiveCheck.java ファイルを開き、既存のコードを以下のコードに置き換えます。

public class PositiveCheck {

    public static void main(String[] args) {
        // Define an array of integers
        int[] numbers = {10, -5, 20, 0, 15, -8};

        // Loop through the array
        for (int i = 0; i < numbers.length; i++) {
            // Get the current number
            int currentNumber = numbers[i];

            // Check if the number is positive, negative, or zero
            if (currentNumber > 0) {
                System.out.println(currentNumber + " is a positive number.");
            } else if (currentNumber < 0) {
                System.out.println(currentNumber + " is a negative number.");
            } else {
                System.out.println(currentNumber + " is zero.");
            }
        }
    }
}

新しい部分は以下の通りです。

  • else if (currentNumber < 0): これは else if 文です。前の if 条件 (currentNumber > 0) が偽の場合にのみ、currentNumber が 0 より小さいかどうかをチェックします。
  • else: これは else 文です。else ブロック内のコードは、先行する if または else if 条件のいずれも真でない場合に実行されます。この場合、数値が 0 より大きくなく、0 より小さくない場合、それは 0 であると判断されます。

PositiveCheck.java ファイルを保存します。

次に、ターミナルで修正したプログラムをコンパイルして実行します。

javac PositiveCheck.java
java PositiveCheck

これで、配列内の各数値が分類された出力が表示されるはずです。

10 is a positive number.
-5 is a negative number.
20 is a positive number.
0 is zero.
15 is a positive number.
-8 is a negative number.

これは、ループ内で if-else if-else 文を使って複数の条件を扱う方法を示しています。これは、プログラミングにおける意思決定の基本的なパターンです。

partitioningBy や複数の filter 操作などの高度な手法を使って Stream API でも同様の結果を得ることができますが、この特定のタスクには、特に初心者にとって、if-else if-else を使った for ループのアプローチが明確で簡単です。

まとめ

この実験では、Java で配列が正の数のみを含むかどうかをチェックする方法を学びました。主に 2 つの方法を探りました。1 つは for ループを使って配列を反復処理する方法で、もう 1 つは Java の Stream API を利用する方法です。

まず、Java クラスを作成し、for ループを使って整数配列の各要素を調べました。条件チェック (if (currentNumber > 0)) を実装して、正の数を識別して出力しました。この基本的なアプローチは、配列内の個々の要素にアクセスして処理する方法を示しています。提供された内容ではループ方法のみが詳細に説明されていますが、実験の構成から、後続のステップで Stream API とゼロ/負の数の扱いについて説明される予定で、この一般的なプログラミングタスクに対するさまざまな手法を包括的に理解できるようになります。