我正在尝试添加用户输入的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 :(得分:2)
对角线的索引应该是[0][0]
到[3][3]
。使用for循环而不是明确地写下来更有意义:
double sum=0;
for (int i=0;i<sumMajorDiagnol.length;i++)
sum+=sumMajorDiagnol[i][i];
答案 1 :(得分:0)
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。
答案 2 :(得分:0)
您可以添加代码
double x = 0;
以及两个for循环中的以下内容:
if(i == j) {
x += sumMajorDiagnol[i][j]
}
通过这种方式,您可以在遍历两个循环后获得结果作为奖励。
您当前的代码失败,因为数组从零开始并且在索引4处访问长度为4的数组意味着您正在从其边界访问它。