为矩阵递归获取输入会导致索引超出边界异常

Getting inputs recursively for matrix gives index out of border exception

我应该编写一个 java 程序,其中包含为矩阵赋值并递归打印矩阵的值。 我试过这段代码,但每次我给出输入时它都会给出超出边界的索引 exception.If 我传递的数字变量比数字少一,它需要少一输入并且


    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 == -1&&j==-1)
                return ;
            
            matrix[i][j] = Double.parseDouble(scan.nextLine());
            
            if(j == -1)
                  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)

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

因为:

所以少了一个输入
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);
    }
}