二维数组列的总和

时间:2011-10-19 15:30:44

标签: java arrays

我有二维数组如下:

[33] [96] [34] [11] [65] [68] [12] [8] [= 327]

[94] [91] [3] [20] [16] [59] [74] [97] [= 454]

[29] [0] [31] [13] [4] [63] [52] [73] [= 265]

[51] [3] [55] [74] [52] [79] [61] [74] [= 449]

[18] [19] [1] [53] [33] [93] [26] [14] [= 257]

[56] [41] [4] [16] [45] [8] [57] [22] [= 249]

[43] [33] [43] [59] [61] [58] [58] [69] [= 424]

[38] [41] [42] [29] [27] [72] [85] [75] [= 409]

[36] [3] [23] [65] [40] [56] [41] [96] [= 36]

[=?] [=?] [=?] [=?] [=?] [=?] [=?] [=?]

如何获取数组中列的总和?

这是获取行总和的代码:

public static void main(String[] args) {
    int[][] nums = new int[9][9];
    int random, total_rows=0, total_cols=0;
    Random randomGenerator = new Random();

    for (int i=0; i < 9; i++) {
        for (int j=0; j < 9; j++) {
            random = randomGenerator.nextInt(100);
            nums[i][j] = random;

            if(j < 8) {
                total_rows += random;
            }else {
                System.out.print("=");
                nums[i][j] = total_rows;
                total_rows = 0;
            }

            System.out.print(nums[i][j] + " ");
        }

        System.out.println();
    }
}

7 个答案:

答案 0 :(得分:4)

您可以尝试:

int[][] num = new int[9][9];
/*
 * ...populate the array
 *
 */
for (int i = 0; i < num.length; i++) {
    int sum = 0;
    for (int j = 0; j < num[i].length; j++) {
        sum += num[j][i];
    }
    System.out.println(sum);
}

答案 1 :(得分:2)

我将你的数组代码与你的求和/显示代码分开 然后,您应该注意到,在内循环访问数组时,您只需要翻转ij

答案 2 :(得分:1)

家庭作业问题:)

所以,我不会给你代码,而是告诉你,你已经非常接近答案了。

要计算列,您需要一个单独的数组,然后,当您在每行中创建每一列时,只需将该值添加到正确的位置。

在一天结束时,您将获得行总数以及列总数。鉴于你到目前为止所做的事情,你应该很容易做到。

答案 3 :(得分:1)

这是代码;

2d阵列的行和列的总和的演示代码

import java.util.Random;

public class SumOfColumns {

    public static void main(String[] args) {
        int[][] nums = new int[9][9];

        handleArray(nums);

        printArray(nums);
    }

    private static int getSumOfRow(int[][] array, int rowNum) {
        int sumOfRows = 0;

        for(int i = 0; i < array[rowNum].length; i++)
            sumOfRows += array[rowNum][i];

        return sumOfRows;
    }

    private static int getColumnSum(int[][] array, int columnNum) {
        int sumOfColumn = 0;

        for(int i = 0; i < array.length; i++)
            sumOfColumn += array[i][columnNum];

        return sumOfColumn;
    }

    private static void handleArray(int[][] array) {
        Random randomGenerator = new Random();

        for (int i=0; i < array.length; i++) {
            for (int j=0; j < array[i].length; j++) {
                int random = randomGenerator.nextInt(100);
                array[i][j] = random;
            }
        }
    }

    private static void printArray(int[][] array) {
        System.out.printf("       ");
        for(int i = 0; i < array.length; i++)
            System.out.printf("%4d ", i);
        System.out.println("\n   __________________________________________________");

        for(int i = 0; i < array.length; i++) {
            System.out.printf("%4d | ", i);

            for(int j = 0; j < array[i].length; j++)
                System.out.printf("%4d ", array[i][j]);

            System.out.printf("| Sum = %4d", getSumOfRow(array, i));

            System.out.println();
        }

        System.out.println("   __________________________________________________");

        handleSumOfColumnPrint(array);
    }

    private static void handleSumOfColumnPrint(int[][] array) {
        System.out.printf("       ");

        for(int i = 0; i < array[0].length; i++)
            System.out.printf("%4d ", getColumnSum(array, i));
    }

}

样本输出

          0    1    2    3    4    5    6    7    8 
   __________________________________________________
   0 |    1   86   95   71   78   21   85   99   35 | Sum =  571
   1 |   45   82   68   75   30    1   71   94    8 | Sum =  474
   2 |   33   78   61   74   52   75   63    8    1 | Sum =  445
   3 |   17   10   99   78   61   73   63   40    8 | Sum =  449
   4 |   66   68   54   74   28   78   13    4   79 | Sum =  464
   5 |   75   60   79   76   55   14   20   28   27 | Sum =  434
   6 |   17   17   29   39    6   90    0   94   75 | Sum =  367
   7 |   57   89   73   27   28   42   92   36   16 | Sum =  460
   8 |   40   44   79   64   92   90   43   60   53 | Sum =  565
   __________________________________________________
        351  534  637  578  430  484  450  463  302 

答案 4 :(得分:0)

Array[][] // Vertical, Horizontal. 

//sum of row n:
sum=0
for(int i:Array[n]){
    sum+=i;
}

//sum of column n:
sum=0
for(int i=0;i<Array.length();i++){
    sum+=Array[i][n];
}

我希望这是有道理的。

答案 5 :(得分:0)

任何机会的家庭作业问题?

如果是这样,也许一些提示会更有帮助?

在生成2d数组时,您正在计算行总数 - 因为您逐行执行此操作,因此您可以轻松地为行计算此行(因为您可以随时进行构建),但是对于列来说更棘手,因为每次迭代都会有效地丢失先前行的跟踪。

如果在第一个for循环中生成数组,您将拥有一个完全填充的2d数组,但没有行/列总数。但是数据仍保留在您的数组中,因此您现在可以编写代码来计算这些总数。

作为一个小提示:如果你在生成数据之后写了另一个循环:

int columnTotal = 0;

for (int r=0; r < 9; r++) {
    columnTotal += nums[r][0];
    }

应该让你对第一列(第0列)的值求和。

希望这会有所帮助: - )

答案 6 :(得分:0)

这是我解决问题的代码......

import java.util.Random;

public class columnsAndRowsSummatory
    {
    static int x = 0;
    static int y = 0;

    public static void main (String[] arg)
    {
        String spaces = "       " ;
        //There are 7 spaces on the spaces String
        int[][] nums = new int[9][9];
        int random, rowTotal = 0, colTotal = 0;
        Random randomGenerator = new Random();
        String ColTotal = "";

    for ( x = 0; x < nums.length -1; x++) 
    {
        rowTotal = 0;
        for (y = 0; y < nums.length ; y++)
        {
            random = randomGenerator.nextInt(10000);
            nums[x][y] = random;
            while( y < nums.length -1 )
                {
                rowTotal = rowTotal + random;
                break;
                }

            if(y < nums.length -1 && x != nums.length -1 && random != 0)
            {
                int z = (int)Math.floor(Math.log10(random) );
                System.out.print(random + spaces.substring( (z) ) );
                //This method calculates how many digits does the number 'random'
                //Have and takes that amount away from the spaces string to even 
                //Out numbers displayed
            }
            else if(random == 0 && x != nums.length -1)
            {
                System.out.print(random + spaces);
            }
            else
            {
                System.out.printf("=  %d ", rowTotal);
            }
        }
        System.out.println();
    }
    for(x = 0; x < nums.length -1; x++)
    {
        for (y = 0; y < nums.length -1 ; y++)
        {
            colTotal = colTotal + nums[y][x];
        }
        int z = (int)Math.floor(Math.log10(colTotal) );
        ColTotal = ColTotal + colTotal + spaces.substring(z) ;
        colTotal = 0;
    }
    System.out.print(ColTotal + "<-Totals^");
}
}

现在,在此代码中将显示一个整齐的数组,其中包含您想要的行数和列数,它将在数组的相应最后一行显示列/行总数。如果你要处理的数字超过1000万,那么你需要做的就是在空格字符串中添加一个空格,你就可以了。

例如,如果你有

random = randomGenerator.nextInt(999999);

它会显示如下内容:

711778  119342  62648   8035    652270  344935  101175  265275  174969  =  2440427 
414592  798519  453329  988340  180647  540748  572587  675951  903581  =  5528294 
747535  955957  47966   742898  773810  34212   914212  625716  209569  =  5051875 
492510  998618  622957  517383  704277  397076  970357  280134  842993  =  5826305 
190916  57734   590635  944535  991653  366530  145640  402605  456611  =  4146859 
117598  612710  967466  67209   660383  247281  304953  141144  260186  =  3378930 
635384  660332  768930  340590  800611  758383  41154   289514  189504  =  4484402 
173484  740549  226505  921889  135020  555594  554520  65581   433272  =  3806414 
796617  601478  77503   161865  891582  715084  14614   189920  568788  =  4017451 
4280414 5545239 3817939 4692744 5790253 3959843 3619212 2935840 4039473 <-Totals^