繁体   English   中英

对2D数组的元素求和

[英]Sum the elements of 2D array

我制作了二维打印纸,打印了一些随机元素。

现在,我需要一种方法来计算该元素的总和,但仅计算主对角线以下的元素。

这是我的代码...

class Init {

    public static void main(String[] args) {

        int n = 0;
        int m = 0;
        int aray[][];

        Random random = new Random();
        Scanner tastatura = new Scanner(System.in);

        int[][] array = new int[n][m];
        n = tastatura.nextInt();
        m = tastatura.nextInt();
        array = new int[n][m];
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                array[i][j] = random.nextInt(20);
            }
        }

        for (int[] a : array) {

            System.out.println(Arrays.toString(a));

        }

    }

}

我是这样做的...现在我可以求和了,但是当我尝试多个相同的数字时,我得到0,为什么呢?

Scanner scanner = new Scanner(System.in);
System.out.print("Unesite duzinu kolona i redova : ");    
int rows = scanner.nextInt();
int columns = rows;
int[][] matrix = new int[rows][rows];
Random random = new Random();

System.out.println("Nasumicni/random brojevi su :");
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        matrix[i][j] = random.nextInt(20);

    }
}

for (int[] a : matrix) {

    System.out.println(Arrays.toString(a));

}

//here is the logic which sum those elements
int sum = 0;
for (int i = 1; i < rows; i++) {
    for (int j = i - 1; j >= 0; j--) {
        sum = sum + matrix[i][j];
    }

}

System.out.println("\nMatrix is : ");
for (int i = 0; i < rows; i++) {
    for (int j = 0; j < columns; j++) {
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}

System.out.println("Proizvod elemenata ispod glavne dijagonale je: " + sum);

矩阵的主要对角线包括位于从左上角到右下角的对角线上的那些元素。 但是由于您希望这些元素在主对角线“下方”,因此我提出了一种算法。

int sum = 0;
for (int i = 0; i < n; i++)
     for (int j = 0; j < m; j++)
           if (i == j && (i + 1 < n))
           {
                int temp = i + 1;
                while (temp < n)
                {
                    sum += arr[temp][j];
                    temp++;
                }
           }

另外,您多次声明int[][] array 在获得n和m的值之后,只需声明一次即可。

那这个呢?

int s = 0;
for(int i = 1; i < m; ++i)
     for(int j = 0; j < i; ++j)
           s += a[i][j]; 

有选择地循环遍历主对角线下方的元素并将其求和,而不循环遍历整个矩阵并使其更长。

对于(i = 0; i

对于(j = 0; j

{

如果(j> i)

d1 + = a [i] [j];。 //在对角线上方

其他

如果(i> j)

d2 + = a [i] [j];。 //对角线以下

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM