Как решить массив доступа с помощью списков - PullRequest
1 голос
/ 31 марта 2020
class Result {

      public static int diagonalDifference(List<List<Integer>> arr) {

     int sum_a = 0;
     int sum_b = 0;
     int sum_c = 0;

     int n = 3;



     for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++,i++){

             sum_a += arr[i][j];
        }
    }

    for(int i = 0; i < n ; i++){
        for(int j = n-1; j >= 0; j--,i++){

            sum_b += arr[i][j]; 
        }
    }

      return sum_c = sum_a + sum_b;

     }

}

public class Solution {

 public static void main(String[] args) throws IOException {
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int n = Integer.parseInt(bufferedReader.readLine().trim());

        List<List<Integer>> arr = new ArrayList<>();

        IntStream.range(0, n).forEach(i -> {
            try {
                arr.add(
                    Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
                        .map(Integer::parseInt)
                        .collect(toList())
                );
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        });

        int result = Result.diagonalDifference(arr);

        bufferedWriter.write(String.valueOf(result));
        bufferedWriter.newLine();

        bufferedReader.close();
        bufferedWriter.close();
    }
}

** Я использовал две целочисленные переменные для добавления диагональных сумм из массива. И я получаю ошибку времени компиляции. Решение. java: 38: ошибка: массив требуется, но список> найден sum_a + = arr [i] [j];

Решение. java: 45: ошибка: массив требуется, но список> найден sum_b + = arr [i] [j]; Может ли кто-нибудь помочь мне понять это. **

Ответы [ 3 ]

0 голосов
/ 31 марта 2020
diagonalDifference(List<List<Integer>> arr)
...
sum_a += arr[i][j];

Вы не можете получить доступ к ArrayList с помощью [x], вы должны использовать .get (x)

diagonalDifference(List<List<Integer>> arr)
...
sum_a += arr.get(i).get(j);
0 голосов
/ 31 марта 2020

Как уже упоминалось в других ответах, вы должны использовать get для доступа к элементам списка. Что более важно, тем не менее, это то, что вы должны изменить свой алгоритм. Требуется только один l oop, а не две петли для суммирования диагонали:

for(int i = 0; i < arr.size(); i++) {
  sum_a += arr.get(i).get(i);
}

и аналогичные для sum_b. Вы даже можете рассчитать разницу следующим образом:

public static int diagonalDifference(List<List<Integer>> arr) {
   int result = 0;
   for (int i = 0; i < arr.size(); i++) {
      List<Integer> row = arr.get(i);
      result += row.get(i) - row.get(n - i - 1);
   }
   return result;
}

Здесь я полагаю, что вы действительно хотите рассчитать разницу диагоналей, а не сумму.

0 голосов
/ 31 марта 2020

Попробуйте это:

    public static int diagonalDifference(List<List<Integer>> arr) {
        int sum_a = 0;
        int sum_b = 0;
        int sum_c = 0;

        int n = 3;

        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++,i++){
                sum_a += arr.get(i).get(j);
            }
        }

        for(int i = 0; i < n ; i++){
            for(int j = n-1; j >= 0; j--,i++){
                sum_b += arr.get(i).get(j);
            }
        }
        return sum_c = sum_a + sum_b;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...