0

迷路のパターンを表すテキストファイルを読んでいます。各行が1dchar配列に読み込まれ、1つの1d配列が2dchar配列に挿入されます。

次のメソッドでは、でnullpointerexceptionを取得します

        line = (input.readLine()).toCharArray();

private void fillArrayFromFile() throws IOException 
{

    BufferedReader input = new BufferedReader(new FileReader("maze.txt"));

    //Read the first two lines of the text file and determine the x and y length of the 2d array
    mazeArray = new char[Integer.parseInt(input.readLine())][Integer.parseInt(input.readLine())];

    char [] line = new char[10];

    //Add each line of input to mazeArray
    for (int x = 0; x < mazeArray[0].length; x++) 
    {
        line = (input.readLine()).toCharArray();
        System.out.print(x + " : ");
        System.out.println(line);
        mazeArray[x] = line;
    }
}
4

2 に答える 2

5

BufferedReader.readLine()null読み取る入力がなくなると戻ります。詳細については、Java のドキュメントを参照してください。

于 2012-04-30T10:34:57.673 に答える
1

明白な答えは、input.readLine()を返すことです。null何も指していないオブジェクトのメソッドを呼び出しているので、を取得していNullPointerExceptionます。

ただし、この問題の根本は、行と列の認識とテキストファイルの認識との不一致です。また、私があなたのコードを正しく読んでいる場合、あなたは間違ったインデックスをループしています。

テキストファイルの例を次に示します。

4
6
a b c d
b c d a
a d c a
b d b a
c d a a
b a b a

これについて考える良い方法は、あなたが持っているの数について考えることです。

たとえば、上記のテキストファイルには「4列6行あります」と書かれています。

これは、からの範囲とxからの範囲を意味します。03y05

あなたの用語では、x-lengthは列の数であり、y-lengthは行の数です。

もちろん、インデックスが増加していると仮定すると、行はになり、列は下に移動することを忘れないでください。

これは非常に重要です。xとyは基本的に、グリッド内の特定の場所へのインデックスであるためです。

それがおそらく原因ですが、以下で修正するいくつかのセマンティックエラーもあります。

BufferedReader input = new BufferedReader(new FileReader("maze.txt"));

//Read the first two lines of the text file and determine the x and y length of the 2d array
int mazeWidth = Integer.parseInt(input.readLine());  //A.K.A number of columns
int mazeHeight= Integer.parseInt(input.readLine());  //A.K.A number of rows

//          ranges: [0...3][0...5] in our example
mazeArray = new char[mazeWidth][mazeHeight];

char [] line;

//Add each line of input to mazeArray
for (int y = 0; y < mazeHeight; y++) 
{
    line = (input.readLine()).toCharArray();

    if ( line.length != mazeWidth )
    {
        System.err.println("Error for line " + y + ". Has incorrect number of characters (" + line.length + " should be " + mazeWidth + ").");
    }
    else {
        System.out.print(y + " : ");
        System.out.println(java.util.Arrays.toString(line));
        mazeArray[y] = line;
    }
}
于 2012-04-30T10:49:47.043 に答える