繁体   English   中英

添加4x4数组的对角线

[英]Adding the diagonal of a 4x4 array

我试图添加用户输入的4x4矩阵的对角线,并且在运行程序时,在数组中添加所有4个值的行给出了错误。

我没有正确添加它们吗?

import java.util.Scanner;

public class Set_9_P7_2 {

    public static void main(String[] args) {

        double x;
        double[][] sumMajorDiagnol = new double[4][4];

        System.out.println("Enter a 4-by-4 matrix row by row:");
        Scanner input = new Scanner(System.in);
         for (int i = 0; i < sumMajorDiagnol.length; i++) {
             for (int j = 0; j < sumMajorDiagnol.length; j++) {
                 sumMajorDiagnol[i][j] = input.nextDouble();                 
             }
         }

         x = sumMajorDiagnol[1][1] + sumMajorDiagnol[2][2] + sumMajorDiagnol[3][3] + sumMajorDiagnol[4][4];

         System.out.println("The sum of the elements in the major diagnal is " + x);

    }

}

而不是打印实际的答案4,我得到此错误:

    Enter a 4-by-4 matrix row by row:
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at Set_9_P7_2.main(Set_9_P7_2.java:21)

指向此行:

x = sumMajorDiagnol[1][1] + sumMajorDiagnol[2][2] + sumMajorDiagnol[3][3] + sumMajorDiagnol[4][4];

这不是您应该添加它们的方式吗?

对角线的索引应为[0][0][3][3] 而且,使用for循环而不是显式地写下来更有意义:

double sum=0;
for (int i=0;i<sumMajorDiagnol.length;i++)
   sum+=sumMajorDiagnol[i][i];
x = sumMajorDiagnol[1][1] + sumMajorDiagnol[2][2] + sumMajorDiagnol[3][3] + sumMajorDiagnol[4][4]

改成:

x = sumMajorDiagnol[0][0] + sumMajorDiagnol[1][1] + sumMajorDiagnol[2][2] + sumMajorDiagnol[3][3]

或者简单地:

for(int i=0; i<sumMajorDiagnol.length; i++)
    x += sumMajorDiagnol[i][i];

您的数组大小为4,索引范围为0-3。 不是1-4。

您可以添加代码

double x = 0;

以及以下两个for循环中的内容:

if(i == j) {
  x += sumMajorDiagnol[i][j]
}

这样,您将在遍历两个循环后获得结果作为奖励。

您当前的代码失败,因为数组从零开始,并且在索引4处访问长度为4的数组意味着您正在对其进行访问。

暂无
暂无

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

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