我需要创建一个用户可以编辑的动态2D数组。我尝试了很多不同的方法,甚至尝试单独进行以便于诊断,但总是得到java.lang.ArrayIndexOutOfBoundsException
。下面是一些显示问题的代码(不是来自我的项目)。当我尝试用0
填充电路板时,我收到错误。
public class Example {
public static void main (String args[]) {
int rows = 0;
int cols = 0;
int[][] board = new int[rows][cols];
Scanner scan = new Scanner (System.in);
System.out.print("Enter in a row :");
rows = scan.nextInt();
System.out.print("Enter in a col :");
cols =scan.nextInt();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
board[i][j] = 0;
System.out.print ("\t" + board[i][j]);
}
System.out.print ("\n");
}
}
}
答案 0 :(得分:2)
您正在使用0行和0列初始化数组。那是无所不在的。如果用户为行和列输入1和1,则尝试访问第一行。但是没有排。
您应该在获得用户的行数和列数后初始化您的电路板。
int rows = 0; // the Java default value for integers is 0. Equivalent: int rows;
int cols = 0; // equivalent: int cols;
Scanner scan = new Scanner (System.in);
System.out.print("Enter in a row :");
rows = scan.nextInt();
System.out.print("Enter in a col :");
cols =scan.nextInt();
int[][] board = new int[rows][cols]; // now has values other than 0
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
board[i][j] = 0;
System.out.print ("\t" + board[i][j]);
}
System.out.print ("\n");
}
理想情况下,您需要验证用户输入,以确定它们提供了有意义的维度。
答案 1 :(得分:1)
当然你得到ArrayIndexOutOfBoundsException
。您正在使用[0][0]
维度初始化数组。仔细查看rows
和cols
的值。
修正:
允许最多n
行和m
列。
例如int rows = 5, cols = 6
或者只是在您从rows
阅读cols
和Scanner
后移动数组初始化。
坚果:
int rows = Integer.MAX_VALUE;
int cols = Integer.MAX_VALUE;
答案 2 :(得分:1)
如果想一想,它应该是这样的:
public class Example {
public static void main (String args[]) {
int rows = 0;
int cols = 0;
Scanner scan = new Scanner (System.in);
System.out.print("Enter in a row :");
rows = scan.nextInt();
System.out.print("Enter in a col :");
cols = scan.nextInt();
int[][] board = new int[rows][cols];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
board[i][j] = 0;
System.out.print ("\t" + board[i][j]);
}
System.out.print ("\n");
}
}
}