#java #arrays
#java #массивы
Вопрос:
Я хочу написать метод, который вернет 1-ю позицию определенного значения в массиве 2D int. Если значения нет в массиве, то позиция будет представлять собой массив со значениями [-1, -1]
Мой код:
public static int[] findItemIn2DArray(int[][] A, int value)
{
int position[] = new int [] {-1, -1} ;
for (int i=0; i < A.length; i )
{
for (int j=0; j < (A[i].length/2) 1; j )
{
if ( A[i][j] == value )
{
position [0] = i;
position [1] = j;
}
break;
}
break;
}
return position;
}
Я даю массив
int numbers[][] =
{
{2,3,5} ,
{4,1,0,10} ,
{3,9,10} ,
{5,9,10,1,12}
};
и я ищу значение 10.
Предполагалось, что он вернет [1,3], но вместо этого я получаю [-1, -1] . Я думаю, что он не проходит через всю строку, а проверяет только первое значение.
Можете ли вы мне помочь? Спасибо.
Комментарии:
1. Почему вы ищете только половину «встроенного» массива? Похоже, что простая отладка или ведение журнала прояснят это почти сразу.
Ответ №1:
Прежде всего, вам нужно выполнить итерацию по всему столбцу, а не только по его половине (во втором цикле for).
Во-вторых, ваш первый break
оператор должен находиться ВНУТРИ оператора if, поскольку в том виде, в котором у вас есть код сейчас, ваша программа всегда будет выходить из кода, не доходя до всех элементов.
В-третьих, почему у вас есть второй break
? Это приводит к прерыванию вашего кода каждый раз, когда вы проходите только первую строку. Вам это там не нужно.
Ваш код должен выглядеть следующим образом:
public static int[] findItemIn2DArray(int[][] A, int value)
{
int position[] = new int [] {-1, -1} ;
boolean found = false;
for (int i=0; i < A.length; i )
{
for (int j=0; j < (A[i].length); j )
{
if ( A[i][j] == value )
{
position [0] = i;
position [1] = j;
found = true;
break;
}
}
if(found)
break;
}
return position;
}
Ответ №2:
если первое вхождение не равно значению, цикл сразу прерывается. Попробуйте переместить оператор break внутри оператора ‘if’
Ответ №3:
это потому, что вы прерываете внешний цикл for после внутреннего цикла for
Ответ №4:
(A[i].length/2) 1 была опечаткой, вместо этого должно быть [i].length (вот что происходит, когда вы используете CNTL C без проверки!)
Комментарии о команде break были очень полезными, спасибо всем!