0

我正在阅读一个代表迷宫图案的文本文件。每一行都被读入一维字符数组,然后将一个一维数组插入到二维字符数组中。

在下面的方法中得到一个空指针异常

        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 行”。

这也意味着xrange from 0to3yrange from 0to 5

用您的话来说,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 回答