はじめに
この実験では、Java で配列が正の数のみを含んでいるかどうかをチェックする方法を学びます。これを達成するためのさまざまなアプローチを探ります。まずは、ループを使って配列を反復処理し、各要素を個別にチェックする基本的な方法から始めます。
基本的なループ方法の後、Java Stream API の使用について詳しく調べます。これは、コレクションを処理するためのより最新かつ簡潔な方法です。最後に、配列が正の値のみを含んでいるかどうかを判断する文脈で、ゼロと負の数をどのように扱うかについて議論します。この実験では、Java での配列操作と条件ロジックに関する実践的なスキルを身につけることができます。
配列をループして正の数をチェックする
このステップでは、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: これは各反復の前にチェックされる条件です。iがnumbers配列の長さより小さい限り、ループは続きます。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 とゼロ/負の数の扱いについて説明される予定で、この一般的なプログラミングタスクに対するさまざまな手法を包括的に理解できるようになります。



