2D数组的ArrayIndexOutOfBoundsException

时间:2013-04-27 00:21:40

标签: java java.util.scanner

我正在尝试创建一个程序,在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-

2 个答案:

答案 0 :(得分:0)

nextInt()不会更改Scanner中的行计数器,因此nextLine()调用将返回您当前所在行的其余部分。为避免这种情况,您需要在nextLine()后执行额外nextInt()来明确更改行计数器:

s.nextInt();
s.nextLine();

来自Scanner.nextLine API doc:

  

此方法返回当前行的其余部分,不包括任何行   最后的分隔符。

因此,在代码中,对nextLine()的第一次调用只返回一个空字符串。

答案 1 :(得分:0)

s.nextInt();替换为s.nextLine();以从文件中读取第一行。如果您需要该值,可以在其上Integer.parseInt()