将2D数组条目初始化为0时的ArrayIndexOutOfBoundsException

时间:2013-09-23 20:08:55

标签: java arrays dynamic 2d

我需要创建一个用户可以编辑的动态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"); 
            }
        }
    }

3 个答案:

答案 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]维度初始化数组。仔细查看rowscols的值。

修正:

允许最多n行和m列。
例如int rows = 5, cols = 6

或者只是在您从rows阅读colsScanner后移动数组初始化。

坚果:

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