JAVA, как бы я вычислил сумму каждой строки в двумерном массиве?

Вопрос: Я пишу код, чтобы вычислить общее количество каждой строки в массиве. public static int sum(int[][] array) { int total = 0; for (int i = 0; i < array.length; i++) { for (int k = 0; k < array[i].length; k++) { total = total + array[i][k]; } } return total; } Вышеприведенный код состоит

Вопрос:

Я пишу код, чтобы вычислить общее количество каждой строки в массиве.

public static int sum(int[][] array) { int total = 0; for (int i = 0; i < array.length; i++) { for (int k = 0; k < array[i].length; k++) { total = total + array[i][k]; } } return total; }

Вышеприведенный код состоит в том, чтобы выработать общую сумму для всех чисел в двумерном массиве, однако я пытаюсь разобраться в сумме для каждой отдельной строки для массива.

public static int[] rowSums(int[][] array) { }

Я очень не уверен в том, что делать, чтобы код работал над 2D-массивом для каждой строки.

Ответ №1

Если вы используете Java 8, вы можете сделать это следующим образом:

int[] ar = Arrays.stream(new int[][]{{1,2},{3,5}}) // source .mapToInt(arr -> IntStream.of(arr).sum()) // sum inner array .toArray(); // back to int[] System.out.println(Arrays.toString(ar)); // print the array

Без потока:

int[][] arr = {{1,2},{3,5}}; // create a array that stores the total of each inner array int[] total = new int[arr.length]; // first loop for outer array for (int i = 0; i < arr.length; i++) { // loop for inner array for (int k = 0; k < arr[i].length; k++) { // since default value of total[i] is 0, we can directly use += total[i] += arr[i][k]; } } // print the array System.out.println(Arrays.toString(total)); Ответ №2

Вы имели в виду что-то вроде этого:

public static int[] sum(int[][] array) { //create an array of size array.length int[] result = new int[array.length]; int total; //Loop over the first dimension for (int i = 0; i < array.length; i++) { total = 0;//Make sure to re-initialize the total in each iteration //For each row calculate the sum and store it in total for (int k = 0; k < array[i].length; k++) { total += array[i][k]; } //When you finish put the result of each row in result[i] result[i] = total; } return result; }

пример

System.out.println( Arrays.toString(sum(new int[][]{{1, 1, 1}, {2, 2}, {3, 3}})) );

Выходы

[3, 4, 6] Ответ №3

На основе ответа @YFC_L, но используя расширенный цикл:

public static int[] sum2(int[][] array) { //create an array of size based of how many rows the array has int[] result = new int[array.length]; int rowIndex = 0; //Loop over each row for (int[] row : array) { int total = 0; //Calculate the sum of the row for (int n : row) { total += n; } //Store the sum in the result result[rowIndex++] = total; } return result; }

Кроме того, этот метод может быть проверен exatelly таким же образом:

public static void main(String[] args) { System.out.println( Arrays.toString(sum2(new int[][]{{1, 1, 1}, {2, 2}, {3, 3}})) ); }

и, конечно, результат тот же:

[3, 4, 6] Ответ №4public static List<Integer> sum(int[][] array) { List<Integer> total = new ArrayList<>(); for (int i = 0; i < array.length; i++) { int sum = 0; for (int k = 0; k < array[i].length; k++) { sum = sum + array[i][k]; } total.add(sum); } return total; }

Если вам нужно использовать int [] после получения результата,

List<Integer> total = sum(ar); Integer[] result = total.toArray(new Integer[0]);

Используйте объект результата для дальнейшего использования.

Ответ №5

Попробуйте это с небольшими изменениями с кодом

public static int[] sum(int[][] array) { List<Integer> rowTotal = new ArrayList<>(); int total = 0; for (int i = 0; i < array.length; i++) { for (int k = 0; k < array[i].length; k++) { total = total + array[i][k]; } rowTotal.add(total); total = 0; } return rowTotal.stream().mapToInt(i->i).toArray(); }

Оцените статью
Добавить комментарий