我使用Integer.parseInt()
将每行data.txt的String变量更改为int数据类型。 data.txt文件如下所示:
5
6
3
5
0
......等等。我在文本文件中也没有空格,所以我应该能够完美地解析每一行的字符串。我也没有在文本文件的结尾或开头有一个额外的空行。这是错误消息:
Exception in thread "main" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
代码:
public static int[][][] readFile() throws IOException{
int[][][] hero = new int[2][2][9];
try(BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
String line = br.readLine();
int num;
while (line != null) {
for (int i=0;i<2;i++){
for (int j=0;j<2;j++){
for (int k=0;k<9;k++){
line = br.readLine();
num = Integer.parseInt(line);
hero[i][j][k] = num;
}
}
}
}
}
return hero;
}
答案 0 :(得分:2)
null
。你应该在检测到时退出你的循环:
line = br.readLine();
if (line == null) break;
答案 1 :(得分:0)
我能够非常轻松地找到该错误,当你得到 NullPointerException 时,总是尝试在控制台中将其打印出来然后再做一些事情,以确保。我刚刚在System.out.println(line)
之前添加了Integer.parseInt()
,请记住这样做,这将使您的生活更加轻松。
答案 2 :(得分:0)
你得到null因为你的data.txt上有5行你正在读新行37次(在循环之前一次,在三次循环中读36次)。正如robert所说,您应该使用break或设置更改代码执行的顺序来摆脱循环。此外,您的第一个读取行未分配给您的num变量。尝试改为:
try(BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
String line = br.readLine();
int num;
while (line != null) {
for (int i=0;i<2;i++){
for (int j=0;j<2;j++){
for (int k=0;k<9;k++){
if(line==null){
k=9;
}
num = Integer.parseInt(line);
line = br.readLine();
hero[i][j][k] = num;
}
}
}
}
}