【问题标题】:Adding the diagonal of a 4x4 array添加 4x4 数组的对角线
【发布时间】:2014-11-25 17:36:53
【问题描述】:

我正在尝试添加用户输入的 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];

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

【问题讨论】:

    标签: java multidimensional-array add


    【解决方案1】:

    对角线的索引应该从[0][0] 到[3][3]。使用 for 循环而不是明确地写下来会更有意义:

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

    【讨论】:

    • 谢谢,我会在时间结束后关闭这个问题。你能解释一下为什么循环会更有意义吗?我是 Java 新手。
    • @SamShaheen 循环的优点是对于二维数组的任何维度都有相同的代码工作。
    • 如果我想让它把整个矩阵作为一个整体而不是对角线相加,最好的方法是什么? @eran
    • @SamShaheen 如果您的意思是对矩阵的所有元素求和,嵌套循环就可以完成这项工作(类似于用于填充二维数组的循环)。
    【解决方案2】:
    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。

    【讨论】:

      【解决方案3】:

      你可以添加代码

      double x = 0;
      

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2017-04-11
        • 2019-01-18
        相关资源
        最近更新 更多