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 に答える