0

我正在尝试创建一个程序,该程序在 10X10 大小的 2D 阵列板上生成滑槽和梯子。为了生成这些滑槽和梯子,我必须创建一个名为的方法,该方法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

4

2 回答 2

0

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

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

来自Scanner.nextLine API 文档:

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

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

于 2013-04-27T00:32:48.690 回答
0

替换s.nextInt();s.nextLine();从文件中读取第一行。如果您需要该值,则可以Integer.parseInt()使用它。

于 2013-04-27T00:33:45.817 回答