簡體   English   中英

如何找到多維數組的值總和並替換未使用的索引的值?

[英]How do I find the sum of values for a multidimensional array and replace values of unused indexes?

我有4x4 2D數組,每個索引中已經有值。 我想要一個函數來計算數組的行/列的總和並將其存儲在第一列/最后一列,並使其他索引恢復為0。

這是我必須呈現的數組:

public static void print2Darray(int[][] numbers) {
    for (int i = 0; i < numbers.length; i++) {
        for (int j = 0; j < numbers.length; j++) {
            System.out.print(numbers[i][j]);
            System.out.print("\t");
        }
        System.out.println();
    }
}

顯示如下:

10  15  30  40  
15  5   8   2   
20  2   4   2   
1   4   5   0

目前,這是我擁有的功能:

public static void sumLeft(int[][] numbers) {
    for (int i = 0; i < numbers.length; i++) {
        numbers[i][0] = (numbers[i][0] + numbers[i][1] + numbers[i][2] + numbers[i][3]);
        if (i == 3) {
            numbers[0][1] = 0;
            numbers[0][2] = 0;
            numbers[0][3] = 0;
            numbers[1][1] = 0;
            numbers[1][2] = 0;
            numbers[1][3] = 0;
            numbers[2][1] = 0;
            numbers[2][2] = 0;
            numbers[2][3] = 0;
            numbers[3][1] = 0;
            numbers[3][2] = 0;
            numbers[3][3] = 0;
        }
    }
}

這樣做:

95  0   0   0   
30  0   0   0   
28  0   0   0   
10  0   0   0   

我只想找到一種算法,無需“作弊”或僅通過它破解自己的方式就可以做到這一點。

您需要做的就是循環遍歷“行”數組的元素:

public static void sumLeft(int[][] numbers) {
    for (int i = 0; i < numbers.length; i++) {
        for (int j = 1; j < numbers[i].length; j++) {
            numbers[i][0] += numbers[i][j];
            numbers[i][j] = 0;
        }
    }
}

按照相反的順序使用內循環:

for (int i = 0; i < numbers.length; i++) { // for all rows
    int sum = 0; // about to be sum, reset every row
    for (int j = numbers[i].length -1 ; j >=0; j--) { // iterate reverse in columns
        if (j == 0) {
            numbers[i][j] += sum; // final sum
        } else {
            sum += numbers[i][j]; // keep evaluating
            numbers[i][j] = 0; //reset
        }
    }
}

您為什么不做以下簡單操作:

for (int i = 0; i < numbers.length; i++) {
    for (int j = 1; j < numbers[i].length; j++) {
        numbers[i][0] += numbers[i][j];
        numbers[i][j] = 0;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM