我的程序符合但是当我运行该程序时,它给了我一个"数组索引超出界限"
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正确的方式?我认为不是因为我有一个超出界限的数组异常。我猜它意味着它指向该地区的现场而且什么也没有。
答案 0 :(得分:1)
确保分割线工作正常,并且你有3个不同的字符串o.w. b [1]或b [2]应导致错误。打印或调试以查看b [0]的值是什么。
答案 1 :(得分: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();
}
每当您正在开发代码时,您都希望添加调试语句来转储各个字段的值,以帮助您了解您正在执行的操作。在这里使用一些关键的调试语句来填充代码将帮助您协调您的假设(即“我的数组有三个元素”)与实际发生的事情(即“我的数组只有一个元素”)。
答案 2 :(得分: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();
}
}
}
答案 3 :(得分:0)
在while循环之前执行此操作
reader.nextLine[];
因为文件的第一行只有一个元素。