Найти позицию значения int в 2D-массиве int в java

#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 были очень полезными, спасибо всем!