はじめに
この実験では、Java の配列が空かどうかをチェックする方法を学びます。配列の長さをチェックする基本的な手法を説明するとともに、配列自体が null である場合の対処方法についても取り上げます。異なる配列型を使ってこれらの概念を練習し、理解を深めます。
配列の長さがゼロか確認する
このステップでは、Java の配列の長さをチェックすることで、配列が空かどうかを確認する方法を学びます。これは、配列を操作する際にエラーを回避するための基本的な操作です。
まず、~/project ディレクトリに ArrayLengthCheck.java という名前の新しい Java ファイルを作成しましょう。左側の WebIDE ファイルエクスプローラーを使ってこれを行うことができます。~/project 領域で右クリックし、「新しいファイル」を選択して、ArrayLengthCheck.java と入力します。
次に、エディタで ArrayLengthCheck.java ファイルを開き、以下のコードを追加します。
public class ArrayLengthCheck {
public static void main(String[] args) {
// Declare and initialize an empty integer array
int[] emptyArray = {};
// Declare and initialize an integer array with elements
int[] populatedArray = {1, 2, 3, 4, 5};
// Check the length of the empty array
if (emptyArray.length == 0) {
System.out.println("emptyArray is empty.");
} else {
System.out.println("emptyArray is not empty. Length: " + emptyArray.length);
}
// Check the length of the populated array
if (populatedArray.length == 0) {
System.out.println("populatedArray is empty.");
} else {
System.out.println("populatedArray is not empty. Length: " + populatedArray.length);
}
}
}
ここでの新しい概念を理解しましょう。
int[] emptyArray = {};:これはemptyArrayという名前の整数配列を宣言し、空の配列として初期化します。int[] populatedArray = {1, 2, 3, 4, 5};:これはpopulatedArrayという名前の整数配列を宣言し、5 つの整数要素で初期化します。array.length:これは Java の配列のプロパティで、配列内の要素の数を返します。if (condition) { ... } else { ... }:これはif-else文で、プログラミングにおける基本的な制御フロー構造です。これにより、プログラムが判断を行うことができます。括弧内のconditionが true の場合、ifブロック内のコードが実行されます。そうでない場合、elseブロック内のコードが実行されます。
このコードでは、.length プロパティを使って各配列の長さが 0 と等しいかどうかをチェックしています。もし等しければ、配列が空であることを示すメッセージを出力します。そうでなければ、配列が空でないことを示すメッセージとその長さを出力します。
ファイルを保存します(Ctrl+S または Cmd+S)。
次に、WebIDE の下部にあるターミナルを開きます。~/project ディレクトリにいることを確認してください。もしそうでなければ、cd ~/project コマンドを使って移動します。
javac コマンドを使って Java プログラムをコンパイルします。
javac ArrayLengthCheck.java
コンパイルが成功すると、何も出力されません。~/project ディレクトリに ArrayLengthCheck.class ファイルが作成されます。
次に、java コマンドを使ってコンパイルされたプログラムを実行します。
java ArrayLengthCheck
以下の出力が表示されるはずです。
emptyArray is empty.
populatedArray is not empty. Length: 5
この出力は、私たちのプログラムが配列の長さに基づいて空の配列と要素がある配列を正しく識別したことを確認しています。配列の要素にアクセスする前に配列の長さをチェックすることは、ArrayIndexOutOfBoundsException のようなエラーを防ぐための重要なステップです。このエラーは、配列に存在しないインデックスの要素にアクセスしようとしたときに発生します。
null 配列を扱う
前のステップでは、配列の長さをチェックすることで配列が空かどうかを確認する方法を学びました。しかし、もう 1 つ重要なシナリオを考慮する必要があります。配列自体が null の場合、どうすればよいでしょうか?
Java では、変数はオブジェクトへの参照を保持することができますが、特別な値 null を保持することもできます。null は、何のオブジェクトも参照していないことを意味します。null の配列変数の .length プロパティにアクセスしようとすると、プログラムは NullPointerException でクラッシュします。これは Java で非常に一般的なエラーなので、その対処方法を知っておくことが重要です。
前のプログラムを修正して、null 配列をデモンストレーションし、それを扱う方法を見てみましょう。
WebIDE エディタで ArrayLengthCheck.java ファイルを開きます。
既存のコードを以下のコードに置き換えます。
public class ArrayLengthCheck {
public static void main(String[] args) {
// Declare an integer array but do not initialize it (it will be null)
int[] nullArray = null;
// Declare and initialize an empty integer array
int[] emptyArray = {};
// Declare and initialize an integer array with elements
int[] populatedArray = {1, 2, 3, 4, 5};
// Function to check if an array is null or empty
checkArrayStatus(nullArray, "nullArray");
checkArrayStatus(emptyArray, "emptyArray");
checkArrayStatus(populatedArray, "populatedArray");
}
// A helper method to check and print the status of an array
public static void checkArrayStatus(int[] arr, String arrayName) {
System.out.println("Checking " + arrayName + "...");
if (arr == null) {
System.out.println(arrayName + " is null.");
} else if (arr.length == 0) {
System.out.println(arrayName + " is empty.");
} else {
System.out.println(arrayName + " is not empty. Length: " + arr.length);
}
System.out.println(); // Print a blank line for better readability
}
}
変更点を見てみましょう。
int[] nullArray = null;:整数配列変数nullArrayを宣言し、その値を明示的にnullに設定しています。public static void checkArrayStatus(int[] arr, String arrayName):checkArrayStatusという新しいメソッドを作成しました。このメソッドは、整数配列 (arr) と文字列 (arrayName) を入力として受け取ります。これにより、配列の状態をチェックするロジックを再利用することができます。if (arr == null):これがnull配列を扱うための重要な部分です。等価演算子==を使って、配列変数arrがnullかどうかを最初にチェックします。もしnullであれば、メッセージを出力し、この配列に対するさらなる条件のチェックを停止します。else if (arr.length == 0):このチェックは、配列がnullで ない場合 のみ実行されます。配列がnullでなければ、その長さが0かどうかをチェックして、配列が空かどうかを確認します。mainメソッドは、今では各配列 (nullArray、emptyArray、populatedArray) に対してcheckArrayStatusを呼び出します。
ファイルを保存します(Ctrl+S または Cmd+S)。
~/project ディレクトリでターミナルを開きます。
修正した Java プログラムをコンパイルします。
javac ArrayLengthCheck.java
コンパイルが成功したら、プログラムを実行します。
java ArrayLengthCheck
以下の出力が表示されるはずです。
Checking nullArray...
nullArray is null.
Checking emptyArray...
emptyArray is empty.
Checking populatedArray...
populatedArray is not empty. Length: 5
この出力は、私たちのプログラムが null 配列、空の配列、要素がある配列を正しく識別したことを示しています。配列の長さをチェックする 前に null をチェックすることで、null 配列の .length にアクセスしようとした場合に発生する NullPointerException を防ぐことができます。これは Java プログラミングにおける基本的なベストプラクティスです。
異なる配列の型でテストする
前のステップでは、整数型の配列 (int[]) を扱いました。Java では、null のチェックや .length プロパティのチェックという概念は、int、double、boolean などのプリミティブ型であれ、String やカスタムクラスなどのオブジェクト型であれ、あらゆる データ型の配列に適用されることを理解することが重要です。
プログラムをもう一度修正して、異なる型の配列の状態をチェックする方法をデモンストレーションしましょう。
WebIDE エディタで ArrayLengthCheck.java ファイルを開きます。
既存のコードを以下のコードに置き換えます。
public class ArrayLengthCheck {
public static void main(String[] args) {
// Declare a null String array
String[] nullStringArray = null;
// Declare an empty double array
double[] emptyDoubleArray = {};
// Declare a boolean array with elements
boolean[] populatedBooleanArray = {true, false, true};
// Declare a String array with elements
String[] populatedStringArray = {"apple", "banana", "cherry"};
// Use the helper method to check different array types
checkArrayStatus(nullStringArray, "nullStringArray");
checkArrayStatus(emptyDoubleArray, "emptyDoubleArray");
checkArrayStatus(populatedBooleanArray, "populatedBooleanArray");
checkArrayStatus(populatedStringArray, "populatedStringArray");
}
// A generic helper method to check and print the status of an array
// We use Object[] because it can represent an array of any object type
// For primitive types, the check still works on the array reference itself
public static void checkArrayStatus(Object arr, String arrayName) {
System.out.println("Checking " + arrayName + "...");
if (arr == null) {
System.out.println(arrayName + " is null.");
} else if (arr instanceof Object[]) {
// For object arrays, we can cast and check length
Object[] objectArray = (Object[]) arr;
if (objectArray.length == 0) {
System.out.println(arrayName + " is empty.");
} else {
System.out.println(arrayName + " is not empty. Length: " + objectArray.length);
}
} else if (arr.getClass().isArray()) {
// For primitive arrays, we can't cast to Object[], but can still check length
// using reflection or simply rely on the null check and the fact that
// primitive arrays also have a .length property accessible directly
// (though accessing it here would require more complex reflection)
// For simplicity in this example, we'll just indicate it's a non-null, non-empty primitive array
// A more robust check would involve reflection or overloaded methods for each primitive type
try {
int length = java.lang.reflect.Array.getLength(arr);
if (length == 0) {
System.out.println(arrayName + " is empty.");
} else {
System.out.println(arrayName + " is not empty. Length: " + length);
}
} catch (IllegalArgumentException e) {
System.out.println("Could not determine length for " + arrayName);
}
} else {
System.out.println(arrayName + " is not an array.");
}
System.out.println(); // Print a blank line for better readability
}
}
変更点を見てみましょう。
- 異なる型の配列
String[]、double[]、boolean[]を作成しました。 checkArrayStatusメソッドは、今ではObject arrをパラメータとして受け取ります。これにより、Java のすべての配列がオブジェクトであるため、あらゆる型の配列を受け入れることができます。checkArrayStatus内では、まずarrがnullかどうかをチェックします。nullでない場合、instanceof Object[]を使って、それがオブジェクトの配列かどうかをチェックします。もしそうであれば、Object[]にキャストして.lengthをチェックします。arr.getClass().isArray()というチェックも追加して、オブジェクトが配列かどうかを確認します(これはオブジェクト配列とプリミティブ配列の両方に当てはまります)。- プリミティブ配列の場合、この汎用メソッド内で直接
.lengthにアクセスするのはリフレクションを使わないと難しいです。提供されているコードでは、java.lang.reflect.Array.getLength(arr)を使って、あらゆる配列型の長さを取得するより一般的な方法を採用しています。
ファイルを保存します(Ctrl+S または Cmd+S)。
~/project ディレクトリでターミナルを開きます。
修正した Java プログラムをコンパイルします。
javac ArrayLengthCheck.java
コンパイルが成功したら、プログラムを実行します。
java ArrayLengthCheck
以下のような出力が表示されるはずです。
Checking nullStringArray...
nullStringArray is null.
Checking emptyDoubleArray...
emptyDoubleArray is empty.
Checking populatedBooleanArray...
populatedBooleanArray is not empty. Length: 3
Checking populatedStringArray...
populatedStringArray is not empty. Length: 4
これは、null のチェックと長さのチェックの原則が、Java の異なる配列型に一貫して適用されることを示しています。Object とリフレクションを使った汎用の checkArrayStatus メソッドはより複雑ですが、特定の配列型(int[]、String[] など)に対しても、まず null をチェックしてから .length をチェックするという核心的な考え方は同じです。
まとめ
この実験では、Java の配列が空かどうかを length プロパティを調べることで確認する方法を学びました。Java ファイル ArrayLengthCheck.java を作成し、空の整数配列と要素がある整数配列を宣言するコードを書きました。if-else 文を使用して配列の長さをゼロと比較することで、各配列が空かどうかを正常に判断し、結果をコンソールに出力しました。この基本的なテクニックは、配列を扱う際のエラーを防ぐために重要です。



