似乎我的主要变量 n 和 m 无法通过方法维度进行更改。控制台表示此行 a [i] [j] = unos.nextInt(); 中的创建方法存在问题,但是 如果我改变这一行 private int [] [] a = new int [n] [m]; 并输入任何数字,如[3] [4],程序可以工作,但是[n] [m]它没有,你可以帮助我们,这个代码有什么问题。控制台:a [1] [1] =线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:0 提前谢谢..
import java.util.Scanner;
public class Matrica {
private int n, m;
private Scanner unos = new Scanner(System.in);
public void dimensions() {
System.out.print("n: ");
n = unos.nextInt();
System.out.print("m: ");
m = unos.nextInt();
}
private int[][] a = new int[n][m]; // if i put [2][2] or any other number, instead [n][n], program works
public void create() {
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) {
System.out.print("a[" + (i + 1) + "][" + (j + 1) + "]=");
a[i][j] = unos.nextInt(); // console points that this is the problem
}
}
public void print() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.printf("%d\t", a[i][j]);
}
System.out.println();
}
}
}
答案 0 :(得分:1)
问题在于
private int[][] a = new int[n][m];
在执行构造函数中的代码之前执行。也就是说,当new
和n
尚未设置时,m
正在完成,此时默认情况下它们已初始化为0。所以它分配一个没有行或列的数组。
要解决此问题,请将上述内容更改为
private int[][] a;
并在设置n
和m
之后在构造函数中初始化它:
a = new int[n][m];
有关创建实例时执行内容的顺序的详细信息,请参阅this section of the JLS。
答案 1 :(得分:0)
就像@ajb所说的那样,在变量n
&amp;之后初始化数组。 m
已使用Scanner
获取了值。您可以使用dimensions()
方法执行此操作。
public void dimensions() {
System.out.print("n: ");
n = unos.nextInt();
System.out.print("m: ");
m = unos.nextInt();
a = new int[n][m]; //Add the following line.
}