我正在阅读代表迷宫图案的文本文件。 每行读入1d char数组,然后将一个1d数组插入到2d char数组中。
在以下方法中,在
处获取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;
}
}
答案 0 :(得分:5)
BufferedReader.readLine()
返回null
。有关详细信息,请参阅Java documentation。
答案 1 :(得分: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
范围从0
到3
和y
的范围从0
到5
。
在您的术语中,x长度是列数,y长度是行数。
当然,请记住行数越过,列变为向下,假设指数正在增加。
这非常重要。因为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;
}
}