簡體   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