Введение
В этом практическом занятии (лабораторной работе) вы научитесь проверять, является ли массив в Java пустым. Мы рассмотрим основную технику проверки длины массива и также обсудим, как обрабатывать случаи, когда сам массив может быть null. Вы будете практиковать эти концепции на различных типах массивов, чтобы закрепить свое понимание.
Проверка массива на нулевую длину
На этом этапе мы научимся проверять, является ли массив в Java пустым, проверяя его длину. Это фундаментальная операция при работе с массивами, чтобы избежать ошибок.
Сначала создадим новый Java-файл с именем ArrayLengthCheck.java в директории ~/project. Вы можете сделать это с помощью проводника файлов 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и инициализирует его пятью целочисленными элементами.array.length: Это свойство массива в Java, которое возвращает количество элементов в массиве.if (condition) { ... } else { ... }: Это операторif-else, фундаментальная структура управления потоком выполнения в программировании. Он позволяет программе принимать решения. Еслиcondition(условие) в скобках истинно, выполняется код в блокеif. В противном случае выполняется код в блокеelse.
В этом коде мы используем свойство .length для проверки, равна ли длина каждого массива 0. Если это так, мы выводим сообщение, указывающее, что массив пуст. В противном случае мы выводим сообщение, указывающее, что он не пуст, и также выводим его длину.
Сохраните файл (Ctrl+S или Cmd+S).
Теперь откройте терминал внизу WebIDE. Убедитесь, что вы находитесь в директории ~/project. Если нет, используйте команду cd ~/project.
Скомпилируйте Java-программу с помощью команды javac:
javac ArrayLengthCheck.java
Если компиляция прошла успешно, вы не увидите никакого вывода. В директории ~/project будет создан файл ArrayLengthCheck.class.
Теперь запустите скомпилированную программу с помощью команды java:
java ArrayLengthCheck
Вы должны увидеть следующий вывод:
emptyArray is empty.
populatedArray is not empty. Length: 5
Этот вывод подтверждает, что наша программа правильно идентифицировала пустой массив и массив с элементами на основе их длин. Проверка длины массива перед попыткой доступа к его элементам является важным шагом для предотвращения ошибок, таких как ArrayIndexOutOfBoundsException, которая возникает, когда вы пытаетесь получить доступ к элементу по индексу, который не существует в массиве.
Обработка null - массивов
На предыдущем этапе мы научились проверять, является ли массив пустым, проверяя его длину. Однако есть еще один важный сценарий, который необходимо рассмотреть: что делать, если сам массив имеет значение null?
В Java переменная может хранить ссылку на объект или иметь специальное значение null, что означает, что она не ссылается ни на какой объект. Если вы попытаетесь получить доступ к свойству .length переменной массива, которая равна null, ваша программа завершится аварийно с ошибкой NullPointerException. Это очень распространенная ошибка в Java, поэтому важно знать, как ее обработать.
Давайте модифицируем нашу предыдущую программу, чтобы продемонстрировать и обработать нулевые (null) массивы.
Откройте файл ArrayLengthCheck.java в редакторе WebIDE.
Замените существующий код следующим:
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теперь вызываетcheckArrayStatusдля каждого из наших массивов (nullArray,emptyArrayиpopulatedArray).
Сохраните файл (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 перед проверкой длины, мы предотвращаем ошибку NullPointerException, которая возникла бы, если бы мы пытались получить доступ к .length у нулевого (null) массива. Это фундаментальная рекомендация (лучшая практика) в программировании на Java.
Тестирование с различными типами массивов
На предыдущих этапах мы работали с массивом целых чисел (int[]). Важно понимать, что концепции проверки на null и проверки свойства .length применимы к массивам любого типа данных в Java, будь то примитивные типы, такие как int, double или boolean, или объектные типы, такие как String или пользовательские классы.
Давайте еще раз модифицируем нашу программу, чтобы продемонстрировать проверку статуса массивов различных типов.
Откройте файл ArrayLengthCheck.java в редакторе WebIDE.
Замените существующий код следующим:
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. Хотя общий метод checkArrayStatus, использующий Object и рефлексию, более сложен, основная идея проверки на null сначала, а затем на .length остается той же для конкретных типов массивов (например, int[], String[] и т.д.).
Резюме
В этом практическом занятии (лабораторной работе) мы научились проверять, является ли массив в Java пустым, анализируя его свойство length. Мы создали Java-файл ArrayLengthCheck.java и написали код для объявления как пустых, так и заполненных целочисленных массивов. Используя оператор if-else и сравнивая длину массива с нулем, мы успешно определили, является ли каждый массив пустым или нет, и вывели результаты на консоль. Эта фундаментальная техника является важной для предотвращения ошибок при работе с массивами.



