0

ファイルを配列に読み込んでいるときに、null ポインター例外が発生しました。null の場合に例外が発生し、何か他のものが必要であることに気付きました。配列地雷原は既に初期化されています。例外は " minefield[i][j]=input.charAt(j)+"";" で発生します

この形式のファイルを読み込もうとしています:

#of row
#of column
abcd
efgh
ijkl

これはコードです:

     try {
            BufferedReader in =new BufferedReader (new FileReader(name+".txt"));
            String input=in.readLine();      
            row = Integer.parseInt(input);
            input=in.readLine();
            col = Integer.parseInt(input);
            int c =0;
            input=in.readLine();
            for (int i=0;i<row;i++){
            input=in.readLine();
            for (int j=0;j<col;j++){
                  System.out.println (input.charAt(j));
                  minefield[i][j]=input.charAt(j)+"";
               }
            }
            System.out.println("The file has been loaded");
            in.close();
         }
            catch(IOException iox){
               System.out.println ("Error reading file");
            }

よろしくお願いいたします。編集:申し訳ありませんが、私は何かを残しました。

4

4 に答える 4

1

メソッド readLine() は、ストリームの最後に到達すると null を返しますが、それをチェックしません。

http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#readLine--を参照してください。

于 2012-09-19T01:26:41.447 に答える
0

初期化されていることを確認してくださいminefield

デフォルトは null であるため、単に宣言するだけminefieldでは十分ではありません。

private String[][] minefield;

String[][]それに新しい配列を割り当てる必要があります。

private String[][] minefield = new String[4][5];
于 2012-09-19T00:47:19.360 に答える
0

nameとが初期化されていることを確認しminefieldます。次に、コードを書き直して、入力した値とrowファイル内の行数が一致しないようにします。

try {
    BufferedReader in =new BufferedReader (new FileReader(name+".txt"));
    String input;
    for (int i=0;i<row;i++){
        input=in.readLine();
        if (input == null) {
           throw new IOException("Expected " + row +
               " lines in the file; only found " + i + " lines");
        }
        for (int j=0;j<col;j++){
            System.out.println (input.charAt(j));
            minefield[i][j]=input.charAt(j)+"";
        }
    }
    System.out.println("The file has been loaded");
    in.close();
 }
 catch(IOException iox){
     System.out.println ("Error reading file");
 }

編集より完全なコードで質問を更新したので、問題が何であるかは明らかです。ファイルから行数と列数を読み取った後、行ごとに 1 行を読み取っていますが、行数のループを開始する前に追加の 1 行を読み取っています。ファイルに空白行が含まれていない限り、これによりファイルの末尾がオーバーランします。

于 2012-09-19T00:49:30.110 に答える
0

入力ファイルの内容を考えるとinput = in.readLine();、一致する行エントリがないエクストラがあります。

...
int c =0;
input=in.readLine();   <-- remove this line
for (int i=0;i<row;i++){
...
于 2012-09-19T01:01:46.183 に答える