尝试读取 data.txt 文件并进行计算
Trying to read a data.txt file and do calculations
我正在使用 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;
}
null
在文件末尾提供。你应该在检测到时跳出你的循环:
line = br.readLine();
if (line == null) break;
我能够很容易地找到该错误,当您遇到 NullPointerException 时,总是尝试在控制台中打印出来,然后再对其进行操作,以确保万无一失。我刚刚在Integer.parseInt()
之前添加了System.out.println(line)
,记得这样做,这会让你以后的生活更轻松。
你得到的是空值,因为你的 data.txt 上有 5 行,你正在读取新行 37 次(一次在循环之前,36 次在三个循环中)。正如罗伯特所说,您应该使用 break 或设置更改代码执行的顺序来打破循环。此外,您的第一个 read 行未分配给您的 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;
}
}
}
}
}
我正在使用 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;
}
null
在文件末尾提供。你应该在检测到时跳出你的循环:
line = br.readLine();
if (line == null) break;
我能够很容易地找到该错误,当您遇到 NullPointerException 时,总是尝试在控制台中打印出来,然后再对其进行操作,以确保万无一失。我刚刚在Integer.parseInt()
之前添加了System.out.println(line)
,记得这样做,这会让你以后的生活更轻松。
你得到的是空值,因为你的 data.txt 上有 5 行,你正在读取新行 37 次(一次在循环之前,36 次在三个循环中)。正如罗伯特所说,您应该使用 break 或设置更改代码执行的顺序来打破循环。此外,您的第一个 read 行未分配给您的 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;
}
}
}
}
}