二维数组,方法和变量

时间:2016-12-18 05:23:42

标签: java arrays

似乎我的主要变量 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();
    }
}
}

2 个答案:

答案 0 :(得分:1)

问题在于

private int[][] a = new int[n][m]; 

在执行构造函数中的代码之前执行。也就是说,当newn尚未设置时,m正在完成,此时默认情况下它们已初始化为0。所以它分配一个没有行或列的数组。

要解决此问题,请将上述内容更改为

private int[][] a;

并在设置nm之后在构造函数中初始化它:

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.
}