Вопрос:
Я пишу код, чтобы вычислить общее количество каждой строки в массиве.
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(); }