Проверьте, существует ли строка в двумерном массиве в Java

У меня проблемы с исправлением кода, чтобы я перестал получать

java.lang.ArrayIndexOutOfBoundsException: 6

Вот мой текущий код:

    public static boolean isRow(int row, double[][] array)
    {
    boolean flag = false;

    if ( array != null && array.length >= 0 )
    {
        if ( array[row] != null )
        {
            flag = true;
        }
    }
    return flag;
    }

Я знаю, что мне, вероятно, понадобится где-нибудь цикл for, чтобы он мог проверить, что

!(row > array.length);

Но я просто не уверен, как записать это. Я использую тест JUNIT, который пытается передать "6" в качестве переменной строки.

Любая помощь очень ценится!

3 ответа

Решение

Вы должны проверить это row находится в диапазоне для массива:

public static boolean isRow(int row, double[][] array)
{
    boolean flag = false;

    if (array != null && row >= 0 && row < array.length)
    {
        if ( array[row] != null )
        {
            flag = true;
        }
    }
    return flag;
}

или, более кратко (используя преимущество короткого замыкания && оператор):

public static boolean isRow(int row, double[][] array)
{
    return array != null && row >= 0 && row < array.length && array[row] != null;
}

Проверьте, существует ли массив [строка], прежде чем запрашивать его у вас, если тест.

public static boolean isRow(int row, double[][] array)
{
boolean flag = false;

if ( array != null && array.length >= 0 && array.length > row)
{
    if ( array[row] != null )
    {
        flag = true;
    }
}
return flag;
}

Если я правильно понимаю, все, что вам нужно проверить, это то, что строка с данным индексом доступна в массиве. За что, как вы написали:

!(row >= array.length);

достаточно. Если массив имеет 6 элементов, array.length вернет 6. Если переданный индекс строки меньше 6, это допустимая строка (строка obv должна быть>= 0).

Редактировать: пожалуйста, обратите внимание на изменение условия, чтобы сделать>=, как предложено Тедом. Вместо этого вы можете просто поместить row

Другие вопросы по тегам