Как этот метод получает правильную диагональ из 2D-массива?

#java #arrays

Вопрос:

Я практикуюсь в кодировании, прямо сейчас я практикуюсь в манипуляции с массивом, и я нашел следующий код для получения левой и правой диагональной суммы двумерного целочисленного массива. Для левой диагональной, я понимаю, что в основном счетчик увеличивается в обоих измерениях, поэтому я получаю ,[0][0],[1][1],[2][2] элементы из массива, который составляет левую диагональ. К сожалению, я на самом деле не понимаю, как правильно использовать выделенный передний экран. Почему я должен использовать .get(arr.size()-(j 1)) ? Это потому, что я, если я не добавлю 1 к int j тому, что я получу ArraysOutOfBondsException ? Спасибо вам за вашу любезную помощь.

  public static int diagonalDifference(List<List<Integer>> arr) {
        int leftDiagonal = 0;
        int rightDiagonal = 0;
        for(int i=0; i < arr.size(); i  ){
    leftDiagonal  = arr.get(i).get(i);
        }
  -->      for(int j=0; j < arr.size(); j  ){
    rightDiagonal  = arr.get(j).get(arr.size()-(j 1)); 
        } <--
    int result = Math.abs(leftDiagonal -rightDiagonal);
    return resu<
 

Комментарии:

1. Как вы знаете, левая диагональ есть [0][0],[1][1],[2][2] . Правая диагональ-это [0][2],[1][1],[2][0] ака [0][2-0],[1][2-1],[2][2-2] , где 2 находится size - 1 . Формула (size-1) - j также может быть написана size - j - 1 или size - (j 1) .

Ответ №1:

Это потому, что я, если я не добавлю 1 к int j, я получу исключение ArraysOutOfBondsException?

ДА.

Массивы в Java индексируются с 0, поэтому , если у вас есть массив определенного размера n , то последний элемент индексируется с n - 1 помощью .