2012-04-30 15 views
0

私は迷路パターンを表すテキストファイルを読んでいます。 各行は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; 
    } 
} 
+7

ファイルの最後ですか? – Nick

答えて

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行あり」と表示されています。また03からx範囲と05からy範囲を意味

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; 
    } 
} 
+0

このすばらしい説明をありがとう! – Singh

+0

あなたは大歓迎です:) –

+0

ああ...私は夜遅くこれをタイプアップしました。奇妙な文章構造を許してください。私は時々それを書くようになる。 –

5

BufferedReader.readLine()戻りnullでNullPointerExceptionが得ます。詳細については、Java documentationを参照してください。

+0

したがって、基本的には、次の行をフェッチして、それを文字配列に変換する前にそのヌルがあるかどうかを調べる必要があります: 'String lineStr =(input.readLine()); if(lineStr == null)ブレーク。 line = lineStr.toCharArray(); ' – devsnd

+0

ありがとう@twallとfivedigit – Singh

関連する問題