1

我的程序符合要求,但是当我运行程序时,它给了我一个“数组索引越界异常”

public void readBoard(String filename) throws Exception { 
    File f = new File("myBoard.csv"); 
    Scanner reader = new Scanner(f); 
    while(reader.hasNext()){ 
        String line = reader.nextLine(); 
        String [] b = line.split(","); 
        String type = b[0]; 
        int i = Integer.parseInt(b[1]); 
        int j = Integer.parseInt(b[2]); 
        if(type.equals("Chute")) 
            board[i][j] = new Chute(); 
        else if(type.equals("Ladder")) 
            board[i][j] = new Ladder(); 
}

错误在 int i = Integer.parseInt(b[1]); 我的问题是我将 String [1] 和 [2] 转换为 int 的方式正确吗?我认为这不是因为我有一个数组越界异常。我猜这意味着它指向该区域的某个位置并且什么都没有。

4

4 回答 4

1

确保行拆分工作正常,并且您有 3 个不同的字符串 b[1] 或 b[2] 应该会导致错误。进行打印或调试以查看 b[0] 的值是多少。

于 2013-04-24T23:49:24.820 回答
1

IndexOutOfBounds 确实意味着您正在尝试访问数组中不存在的元素。添加:

System.out.println("array size = " + b.length);

看看数组实际上有多长。您希望数组的长度为 3,但根据实际读取的行和拆分它的方式,您似乎有一个长度为 1 的数组。这也有助于查看您的实际行试图分裂。

尝试这个:

public void readBoard(String filename) throws Exception{
    File f = new File("myBoard.csv");
    Scanner reader = new Scanner(f);
    while(reader.hasNext()){
        String line = reader.nextLine();

        // What line do we intend to process?

        System.out.println("Line = " + line);

        String [] b = line.split(",");

        // How long is the array?

        System.out.println("Array length = " + b.length);

        String type = b[0];
        int i = Integer.parseInt(b[1]);
        int j = Integer.parseInt(b[2]);
        if(type.equals("Chute"))
            board[i][j] = new Chute();
        else if(type.equals("Ladder"))
            board[i][j] = new Ladder();
    }

每当您在开发代码的过程中,您都希望添加转储各种字段值的调试语句,以帮助您了解自己在做什么。在您的代码中添加一些关键的调试语句将帮助您协调您的假设(即“我的数组有三个元素”)与实际发生的事情(即“我的数组只有一个元素”)。

于 2013-04-24T23:49:35.167 回答
1

试试这个,因为它超出了数组大小为 1 的范围,你应该跳过所有大小为 1 的数组。

public void readBoard(String filename) throws Exception {
    File in = new File("myBoard.csv");
    Scanner reader = new Scanner(in);
    while (reader.hasNext()) {
        String line = reader.nextLine();
        String[] b = line.split(",");
        if (b.length != 1) {
            String type = b[0];
            int i = Integer.parseInt(b[1]);
            int j = Integer.parseInt(b[2]);
            if (type.equals("Chute"))
                board[i][j] = new Chute();
            else if (type.equals("Ladder"))
                board[i][j] = new Ladder();
        }
    }
}
于 2013-04-25T01:20:40.753 回答
0

在 while 循环之前执行此操作

reader.nextLine[];

因为文件的第一行只有一个元素。

于 2013-04-26T21:54:22.240 回答