Java矩阵对角线差异bug

时间:2015-08-15 12:59:28

标签: java matrix

代码的目的是找出矩阵的2个相对对角线的总和之间的差异。代码:

public static void main(String[] args) {
    Scanner scn=new Scanner(System.in);
    int N=scn.nextInt();
    int diag1=0;
    int diag2=0;
    int[][] matrix=new int[N][N];
    for(int i=0; i<N; i++){
        for(int j=0; j<N; j++){
            matrix[i][j]=scn.nextInt();
            System.out.print(" ");
        }
        System.out.println();
    }
    for(int i=0; i<N; i++){
        for(int j=0; j<N; j++){
            if(i==j)
                diag1+=matrix[i][j];
                //System.out.println(diag1);
        }
    }
    int counter1=0, counter2=N-1;
    for(int i=0; i<N; i++){
        for(int j=0; j<N; j++){
            if(i==counter1 && j==counter2){
                diag2+=matrix[i][j];
                counter1++;
                counter2--;
            }

        }
    }
    System.out.println(diag1); // used this for checking purpose
    System.out.println(diag2); // used this for checking purpose
    System.out.println(Math.abs(diag1-diag2));

我得到了确切的输出,但是HackerRank的测试用例仍然显示代码失败。有人可以解释原因吗? THe code challenge is mentioned here

删除所有额外的打印语句后,我得到了输出!

6 个答案:

答案 0 :(得分:1)

你在这里有一些不必要的打印声明,删除它们

  for(int i=0; i<N; i++){
        for(int j=0; j<N; j++){
            matrix[i][j]=scn.nextInt();
            System.out.print(" ");
        }
        System.out.println();
    }

黑客等级只需要差异,单个空格或单个新行也被视为不同的答案。

我还建议你在一个循环中计算两个总和。

for(int i = 0, j = n - 1; i < n; ++i, j --)
 {
    sum1 += a[i][i];
    sum2 += a[i][j];
  }
System.out.println(Math.abs(sum1 - sum2));

答案 1 :(得分:0)

您正在打印代码中的解决方案以外的数据。因此,输出与他们相同。

删除除打印实际结果的所有System.out.print()System.out.println()来电。

无关注意:要访问矩阵的对角线,不需要遍历所有行和列。对角线处于非常特定的坐标,因此您应该检查这些坐标。这将使您的代码更有效。

答案 2 :(得分:0)

运行的代码应该具有最低的复杂性,并且应该打印确切的输出。如果在hackerrank中插入以下代码将取得成功。另请注意提供错误的测试用例,它们暗示了代码中的错误。

int sum1=0;
int sum2=0;

for(int i = 0, j = n - 1; i < n; ++i, j --){
   sum1=sum1+a[i][i];
   sum2=sum2+a[i][j];
}

System.out.println(abs1(sum1-sum2));

答案 3 :(得分:0)

public class DiagonalMatrix{

    static int diagonalDifference(int[][] a) {
        // Complete this function
        int sum1=0, sum2=0;
        for(int a_i = 0; a_i < a.length; a_i++){
            for(int a_j = 0; a_j < a.length; a_j++){
                if(a_i==a_j)
                {
                   sum1+=a[a_i][a_j];
                }
            }
        }
        for(int b_i = 0, b_j=a.length-1; b_i < a.length && b_j>=0; b_i++, b_j--){
            sum2+=a[b_i][b_j];
        }
        return Math.abs(sum1-sum2);
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] a = new int[n][n];
        for(int a_i = 0; a_i < n; a_i++){
            for(int a_j = 0; a_j < n; a_j++){
                a[a_i][a_j] = in.nextInt();
            }
        }
        int result = diagonalDifference(a);
        System.out.println(result);
        in.close();
    }
}

答案 4 :(得分:0)

您可以使用以下简单代码:

int result = 0;
for(int i = 0;i<n;i++){
    l+=a[i][i];
    r+=a[i][n-1-i];
}
result = abs(l-r);
System.out.println(result)

答案 5 :(得分:-1)

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {       
        Scanner in = new Scanner(System.in);       
        int n = in.nextInt();

        int diognalleft = 0;
        int diognalright = 0;        
        int [][] array = new int[n][n];

        for(int i=0; i<n; i++){
             for(int j=0; j<n; j++){
                   array[i][j]=in.nextInt();
             }
        } 
        for(int i=0; i<n; i++){
              for(int j=0; j<n; j++){
                  if (i == j)
                  {
                       diognalleft = diognalleft + array[i][j];
                  }
                  if( (i+j) == (n-1) )
                  {
                      diognalright = diognalright + array[i][j];
                  }
              }
         }
        System.out.println(Math.abs(diognalleft - diognalright));
    }
}