Проверьте, существует ли строка в двумерном массиве в 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