Как проверить, является ли массив пустым в Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, является ли массив в Java пустым. Мы рассмотрим основную технику проверки длины массива и также обсудим, как обрабатывать случаи, когда сам массив может быть null. Вы будете практиковать эти концепции на различных типах массивов, чтобы закрепить свое понимание.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/operators("Operators") java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/DataStructuresGroup -.-> java/arrays("Arrays") java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") subgraph Lab Skills java/operators -.-> lab-560002{{"Как проверить, является ли массив пустым в Java"}} java/if_else -.-> lab-560002{{"Как проверить, является ли массив пустым в Java"}} java/arrays -.-> lab-560002{{"Как проверить, является ли массив пустым в Java"}} java/arrays_methods -.-> lab-560002{{"Как проверить, является ли массив пустым в Java"}} java/exceptions -.-> lab-560002{{"Как проверить, является ли массив пустым в Java"}} end

Проверка длины массива на ноль

На этом этапе мы научимся проверять, является ли массив в 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 и сравнивая длину массива с нулем, мы успешно определили, является ли каждый массив пустым или нет, и вывели результаты на консоль. Эта фундаментальная техника является важной для предотвращения ошибок при работе с массивами.