以递归方式获取矩阵的输入会导致索引越界异常



我应该编写一个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 == -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-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〕Index开头:

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);
}
}

最新更新