【问题标题】:Filling 2D Array in Java and getting ExceptionOutOfBounds在 Java 中填充 2D 数组并获取 ExceptionOutOfBounds
【发布时间】:2020-10-15 20:35:54
【问题描述】:

我搜索了一些条目,但我自己无法正确回答我的问题。

我正在尝试用值填充二维数组。 作为一项测试,我目前正在尝试用整数 1 填充数组。

我不明白我的错误。

public static void creatBoard () { 
        
        final int L = 6; 
        final int H = 6; 
        
        // Modell: 
        
        int [] [] board = new int [L] [H]; 
        for (int i = 0; i<=board.length; i++) {
            for (int j = 0; j<=board.length; j++) {
                board [i] [j] = 1; 
            }
            System.out.println("");
            
            
        }

【问题讨论】:

  • 数组的索引从 0 开始。您创建了一个大小为 6 的数组,因此您的数组索引范围为 0...5。您的循环从 0, ... 6 开始(因为 &lt;= 符号)。因此,当您的循环到达索引 6 时,您的数组会超出范围。

标签: java arrays indexoutofboundsexception


【解决方案1】:

使用索引 0 到长度为 1(因为数组索引从 0 开始)

    public static void creatBoard () { 
            
            final int L = 6; 
            final int H = 6; 
            
            // Modell: 
            
            int [] [] board = new int [L] [H]; 
            for (int i = 0; i<board.length; i++) {
                for (int j = 0; j<board[i].length; j++) {
                    board [i] [j] = 1; 
                }
                System.out.println("");           
            }
}

【讨论】:

    【解决方案2】:

    调试一下就知道了

    for (int i = 0; i<=board.length; i++) {
            for (int j = 0; j<=board.length; j++) {
                board [i] [j] = 1; 
            }
            System.out.println("");
            
            
        }
    

    i 和 j 将值从 0 更改为 6,这意味着它超出了数组边界(您迭代 7 个元素,而不是 6),只需删除循环体中的 = 登录

    for (int i = 0; i<board.length; i++) {
            for (int j = 0; j<board[i].length; j++) {
                board [i] [j] = 1; 
            }
            System.out.println("");     
        }
    

    【讨论】:

      【解决方案3】:

      您的棋盘数组大小为 6x6,因此 board.length 为 6。

      当您运行循环 for (int j = 0; j 时,它将从 0 运行到 6,但数组索引是从 0 到 5。所以当 j=6 时,会发生 ExceptionOutOfBounds,因为它将引用索引 board[0][6]

      将两个循环中的条件从 更改为

      【讨论】:

      • 非常感谢!我还有一个小问题。如果我有一个二维array int [][] = board = new [6][7] .length 是什么?是 6 还是 7
      • @forty4seven 当您执行 array.length 时,它会为您提供数组中的行数。如果你的数组是 [6] [7],array.length 会给你 6。如果你想要特定行的长度,那么你需要做 columnLength=array[0].length .. 在这里查看更多细节: stackoverflow.com/questions/4000169/…
      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 2021-09-27
      • 2012-11-27
      • 1970-01-01
      • 2020-11-05
      相关资源
      最近更新 更多