Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加4x4阵列的对角线_Java_Multidimensional Array_Add - Fatal编程技术网

Java 添加4x4阵列的对角线

Java 添加4x4阵列的对角线,java,multidimensional-array,add,Java,Multidimensional Array,Add,我试图添加用户输入的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]; Syst

我试图添加用户输入的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);

    }

}
哪个指向这条线:

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];
double sum=0;
对于(int i=0;i
改为:

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];

for(inti=0;i到您可以添加的代码

double x = 0;
在两个for循环中包含以下内容:

if(i == j) {
  x += sumMajorDiagnol[i][j]
}
这样,在遍历两个循环后,您将获得额外的结果


您当前的代码失败了,因为数组从零开始,访问索引4处长度为4的数组意味着您正在访问超出其界限的数组。

谢谢,伙计,时间一结束,我就结束这个问题。您能解释一下为什么循环更有意义吗?我对java不熟悉。@SamShaheen循环的优点是,它可以让相同的代码在java中工作二维数组的任意维。如果我想把整个矩阵作为一个整体加起来,而不仅仅是对角线,那么最好的方法是什么@eran@SamShaheen如果您的意思是对矩阵的所有元素求和,那么嵌套循环将完成这项工作(类似于用于填充二维数组的循环)。
double x = 0;
if(i == j) {
  x += sumMajorDiagnol[i][j]
}