Search code examples
javamatrixdiagonal

Calculating sum of secondary and primary elements of matrix?


i am trying to calculate it but all i am getting is zero i need to calculate the sum of primary diagonal elements and secondary diagonal elements and then absolute difference of their sum.

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    int a[][] = new int[n][n];
    int sum=0;
    int i=0;
    int j=0;
    int k=n-1;
    int sum1=0;
    for(i=0; i < n; i++){
        for(j=0; j < n; j++){
            a[i][j] = in.nextInt(); 
        }
    }
        int temp=n;
        int temp2=n;
        while(temp>0 && i<n && j<n)
            {
            sum=a[i][j]+sum;
            temp=temp-1;
            i++;j++;
        }
        while(temp2>0 && i<n && k>=0)
            {
            sum1=a[i][k]+sum1;
            temp2=temp2-1;
            i++; k--;
        }
        int diff=sum-sum1;
        if(diff<0)
            diff=-1*diff;
        System.out.println(diff);
}
}

Solution

  • After the first for loop, i and j both have reached value n. That means, i = n and j = n. So while loops won't pass. To avoid this, initialize i and j again.

    i = 0;
    j = 0;
    while(temp>0 && i<n && j<n)
    {
        sum=a[i][j]+sum;
        temp=temp-1;
        i++;j++;
    }
    
    i = 0;
    while(temp2>0 && i<n && k>=0)
    {
        sum1=a[i][k]+sum1;
        temp2=temp2-1;
        i++; k--;
    }
    

    Alternative: you could made the code simpler.

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int a[][] = new int[n][n];
        int sum = 0, sum1 = 0;
    
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                a[i][j] = in.nextInt();
    
                // primary diagonal
                if (i == j) {
                    sum += a[i][j];
                }
    
                // secondary diagonal
                if (i == n - j - 1) {
                    sum1 += a[i][j];
                }
            }
        }
        System.out.println(Math.abs(sum - sum1));
    }