求和2D数组的元素

时间:2018-03-15 02:44:08

标签: java multidimensional-array

我制作了2D arrray,可以打印一些随机元素。

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

这是我的代码......

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));

        }

    }

}

我这样做了......现在我可以总结,但是当我尝试多种相同的数字时,我正在考虑为什么会这样?

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);

3 个答案:

答案 0 :(得分:1)

这个怎么样?

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

这个选择性循环通过主对角线下方的元素并将它们相加,而不会循环遍历整个矩阵并使其更长。

答案 1 :(得分:0)

矩阵的主对角线由位于从左上角到右下角的对角线上的元素组成。但是因为你想要那些元素&#34;低于&#34;主对角线,这是我想出的算法。

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的值后,只需要声明一次。

答案 2 :(得分:0)

为(I = 0;我

对于(j = 0;Ĵ

{

如果(J&GT;ⅰ)

D1 + = A [i] [j] ;. //在对角线上方

否则

如果(I&GT; j)的

D2 + = A [i] [j] ;. //在对角线下方

}