为什么我的代码给了我一个ArrayIndexOutOfBoundsException?

时间:2017-10-21 20:30:41

标签: java arrays

你好,我是一名初学程序员,我尝试了各种不同的方法来使我的代码工作,但所有这些方法都失败了。如果有人能告诉我我的代码有什么问题以及如何修复arrayindexoutofboundsexception错误,我将非常感激。非常感谢你!

这是我的代码:

public static void main(String[] args) {
        // TODO code application logic here

        // getting the number of rows and columns for the maze from the user 
        Scanner scanner = new Scanner(System.in);
        System.out.print("How many rows are in the maze? ");
        int rows = scanner.nextInt();
        int[][] maze = new int[rows][];
        System.out.print("How many columns are in the maze? ");
        int columns = scanner.nextInt();
        maze[rows] = new int[columns];

        // getting the data/danger levels for each row from the user 
        for (int c = -1; c < maze[rows].length; c++) {
            System.out.print("Enter the danger in row " + (c + 1) + ", " + "separated by spaces: ");
            maze[rows][c] = scanner.nextInt();
        }
        System.out.println(maze[rows][columns] + "\n");
    }
}

3 个答案:

答案 0 :(得分:1)

c变量的初始值为-1。 所以当你这样做时

maze[rows][c] = scanner.nextInt();

您收到错误,因为-1索引不存在。

将其更改为

maze[rows][c+1] = scanner.nextInt();

答案 1 :(得分:0)

启动循环计数器c的值为-1,但数组以索引[0]开始。循环增量(c ++作为for循环中的最后一个参数)在每次循环迭代结束时执行,而不是在其开始时执行。

答案 2 :(得分:0)

问题在于这一行:

maze[rows] = new int[columns];

Java中的数组是0索引的,所以如果我创建一个包含3行的迷宫,最后一个索引是2.你想要的是:

maze[rows - 1] = new int[columns]

快速说明,您可以通过设置断点并逐步查看程序的执行情况,在IntelliJ Idea等IDE中快速调试简单程序: debugging-with-intellij