0

将文件读入数组时出现空指针异常。我意识到当它为空并且需要其他东西时会出现异常。阵列雷区已经初始化。异常发生在“ 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

Method readLine() returns null when the end of the stream is reached, but you don't check it.

See http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#readLine--

于 2012-09-19T01:26:41.447 回答
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 回答
0

检查minefield是否已初始化。

仅仅声明minefield是不够的,因为它默认为 null。

private String[][] minefield;

您需要为其分配一个新String[][]数组。

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

确保nameminefield已初始化。然后,我将重写您的代码,以防止您拥有的任何值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");
 }

编辑现在您已经用更完整的代码更新了您的问题,很清楚问题是什么。从文件中读取行数和列数后,每行读取一行,但在开始循环行数之前,您又读取了一行。除非文件包含空行,否则这会导致您超出文件末尾。

于 2012-09-19T00:49:30.110 回答