当前位置: 首页 > 知识库问答 >
问题:

递归获取矩阵的输入会产生索引越界异常

温翔宇
2023-03-14

我应该写一个Java程序,包含给一个矩阵赋值,并递归打印一个矩阵的值。我试过这段代码,但每次输入时,只需少输入一次,然后给出索引出边框异常:


    import java.util.Scanner;

    public class DSPro {

        

        static Scanner scan = new Scanner(System.in);


        
        public static void main(String[] args) {
      
         static double matrix1[][];
         static double matrix2[][];
         static double result[][];
            

                System.out.println("What would be the number of n?");
                int number = Integer.parseInt(scan.nextLine());
                
                matrix1 = new double [number][number];
              matrix2 = new double [number][number];
                result = new double [number][number];
                
           initialize(matrix1, number, number);

            }
        
        
            public static void initialize(double [][] matrix,int i,int j)
        {
            if(i == 0&&j==0)
                return ;
            
            matrix[i][j] = Double.parseDouble(scan.nextLine());
            
            if(j == 0)
                  initialize(matrix,i-1,matrix[0].length);
            
            else
                initialize(matrix, i, j-1);
        }
    }

我还尝试将1加到number中,并传递函数number-1而不是n,然后异常变为:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at data_structure.DSPro.initialize(DSPro.java:168)
    at data_structure.DSPro.initialize(DSPro.java:171)
    at data_structure.DSPro.initialize(DSPro.java:174)
    at data_structure.DSPro.initialize(DSPro.java:174)
    at data_structure.DSPro.main(DSPro.java:53)

您认为我的递归代码是问题所在还是我将它传递给方法的方式?

共有1个答案

卢和昶
2023-03-14

由于以下原因,它需要少一个输入:

if(i == 0 && j==0)
    return;

还应设置元素[0,0]。尝试将条件更改为:

if (i == -1 || j == -1)
    return;

索引超出界限,因为您应该以[length-1]索引开头:

initialize(matrix, number - 1, number - 1);

您还可以在输入每个元素之前添加消息,以便用户知道他输入的是哪个元素。最后还要打印矩阵以确保它是正确的。

最终代码如下:

import java.util.Arrays;
import java.util.Scanner;

public class DSPro {

    static Scanner scan = new Scanner(System.in);
    static double[][] matrix;

    public static void main(String[] args) {
        System.out.println("What would be the number of n?");
        int number = Integer.parseInt(scan.nextLine());
        matrix = new double[number][number];
        initialize(matrix, number - 1, number - 1);

        for (double[] row : matrix) {
            System.out.println(Arrays.toString(row));
        }
    }

    public static void initialize(double[][] matrix, int i, int j) {
        if (i == -1 || j == -1) return;
        System.out.println("Enter element [" + i + ", " + j + "]");
        matrix[i][j] = Double.parseDouble(scan.nextLine());

        if (j == 0) initialize(matrix, i - 1, matrix.length - 1);
        else initialize(matrix, i, j - 1);
    }
}
 类似资料:
  • 在Java中构建汇编程序:我试图将用户的输入读入名为的。如果用户输入的指令与-array中的一个匹配,那么相应的操作码将被计算出来并输出到一个文本文件中。 但是,在输入指令并尝试添加另一条指令后,我得到了一个索引越界异常。 如果你们能帮忙,我会很感激的。

  • 这是我的代码: 该程序的目的是要求用户输入一个字符串,然后统计字符串中每个字符的使用次数。 当我去编译程序时,它工作正常。当我运行程序时,我可以在弹出框中输入字符串,但是在我提交字符串并按确定后,我得到一个错误,说 我不完全确定问题是什么或如何解决。

  • 我一直在四处寻找是否有任何东西可以帮助我,但我不太了解人们的回答,任何我所了解的似乎都不能解决问题!所以基本上正如标题所说,我得到了一个数组索引越界异常,但我不知道为什么。非常感谢任何帮助。 代码:

  • 这段代码是关于一个水罐车游荡在一个环境中寻找有任务的水站。 试图通过访问点的数组列表进行递增,但每次运行代码时,我都得到一个“indexoutofboundsexception”,但其索引不同,而且大小总是与索引相同,所以我非常困惑。中断程序的索引/大小看起来是随机变化的。 示例错误:线程“main”java.lang.IndexOutOfBoundsException:Index:5,SIZE:

  • 从学习利用MATLAB处理矩阵来入手,是入门MATLAB的最好方法!下面就让我们来看看下面这些例子。 输入矩阵有以下几种不同方法: 直接输入组成矩阵的元素。 从外部文件引入矩阵。 利用自带的函数构成矩阵。 利用在*.M文件内自定义的函数来构成矩阵。 下面让我们来输入杜勒的魔方的一组元素,只要遵循下列几个基本步骤就可以了: 用空格或者逗号来区分一行里不同的元素。 用分号';'来区分不同的行。 用方括

  • 问题内容: 在我的游戏代码中,我尝试添加一张手牌。一旦我做完了,我的数组就超出了范围。一切看起来都不错,但也许我缺少了一些东西。 仅供参考,一个和两个是Player实例。来自Main类的相关代码(对格式感到抱歉。我很想将其传输到Stack Overflow): 卡类: 玩家等级: 问题答案: 问题出在你的循环上 没有其他任何值可设置,因此此循环不断循环,直到所有玩家拥有超过52张牌为止。一旦某人拥