我正在尝试创建一个程序,在2D阵列板上生成滑槽和梯子,大小为10X10。为了生成这些滑槽和梯子,我必须创建一个名为readBoard
的方法,它基本上读取一个书面文件(myBoard.csv)并将写入的信息转换成位置并将滑槽和梯子放在2D阵列板上因此。
程序编译但是当我运行它时会出现这个错误:
java.lang.ArrayIndexOutOfBoundsException: 1
at ChutesAndLadders.readBoard(ChutesAndLadders.java:41)
at TestFile.main(TestFile.java:13)
我的印象是,也许我的书面文件有额外的空间,我没有看到这就是为什么它告诉我我已经出界了。但是,我检查了书面文件,看起来很好。如果你能对这个问题提供一些见解,那就太好了。提前致谢!
这是我的getBoard
方法:
public void readBoard(String filename)throws Exception
{
Scanner s=new Scanner(new File(filename));
s.nextInt();
while (s.hasNext())
{
String line=s.nextLine();
String[]singleSplit=line.split(",");
String cellType=singleSplit[0];
int row=Integer.parseInt(singleSplit[1]);
int col=Integer.parseInt(singleSplit[2]);
if (cellType.equals("Chute"))
board[row][col]=new Chute();
else
board[row][col]=new Ladder();
}
}
这是我的书面文件(类型,行,列):
29
滑道,1,0
滑道,2,0
滑道,3,0
滑道,4,0
滑道,5,0
滑道,6,0
滑道,7,0
滑道,8,0
滑道,9,0
滑道,0,1
滑道,0,2
滑道,0,3
滑道,9,1
滑道,9,2
滑道,9,3
梯形图,0,5
梯形图,1,5-
梯形图,2,5-
梯形图,3,5-
梯形图,4,5-
梯形图,5,5
梯形图,6,5
梯形图,7,5
梯形图,8,5
梯形图,9,5
梯形图,9,6
梯形图,9,7
梯形图,9,8
梯形图,9,9-
答案 0 :(得分:0)
nextInt()
不会更改Scanner
中的行计数器,因此nextLine()
调用将返回您当前所在行的其余部分。为避免这种情况,您需要在nextLine()
后执行额外nextInt()
来明确更改行计数器:
s.nextInt();
s.nextLine();
来自Scanner.nextLine API doc:
此方法返回当前行的其余部分,不包括任何行 最后的分隔符。
因此,在代码中,对nextLine()
的第一次调用只返回一个空字符串。
答案 1 :(得分:0)
将s.nextInt();
替换为s.nextLine();
以从文件中读取第一行。如果您需要该值,可以在其上Integer.parseInt()
。