两个人有相同的代码,只有一个人有 NullPointerException?
Two people with the same code, only one has a NullPointerException?
我的朋友和我有完全相同的代码,但只有我的显示空行。我们都是编码的新手,所以我们真的不知道该怎么做,或者如何解决它,尤其是因为它似乎对她有用。
Java 告诉我我的
StringTokenizer st= new StringTokenizer(bf.readLine());
为空。我在网上看到我可以使用 try-catch 方法 运行 我的程序,其中包含空行。但是,我的终端 window 必须以某种方式打印出来(对于我的老师),所以当我 运行 它时,我不能让 try-catch 方法留下额外的打印行。如果有人有任何解决方案,请告诉我!另外,如果有人可以解释一个代码如何对一个人有一个空行,而不是另一个人,那就太好了,因为我真的不知道为什么它对她有用,而不是对我有用。
这是我的完整代码,我指出哪一行包含空行。
import java.util.Scanner;
import java.io.*;
import java.util.*;
public class QuizGrading
{
public static void main (String[]args) throws IOException
{
///key part
System.out.println(" ");
BufferedReader bf = new BufferedReader(new FileReader("key.in"));
StringTokenizer st = new StringTokenizer(bf.readLine()); **(NULL)**
int num = Integer.parseInt(st.nextToken());
int [] key = new int[num];
st=new StringTokenizer(bf.readLine());
for (int i=0; i<num; i++)
{
int an = Integer.parseInt(st.nextToken());
key[i] = an;
}
///answer part
BufferedReader br = new BufferedReader(new FileReader("tenQuizzes.in"));
StringTokenizer answers = new StringTokenizer(br.readLine());
int stu=1;
int numq = Integer.parseInt(answers.nextToken());
for (int u=0; u<numq; u++)
{
int right=0;
answers = new StringTokenizer(br.readLine());
for (int s=0; s<num; s++)
{
int ans=Integer.parseInt(answers.nextToken());
if (ans==key[s])
{
right=right+1;
}
}
double percent = right*100/num;
System.out.println("There are "+right+" questions correct.");
System.out.println("Student "+stu+" scored "+percent+"%.");
System.out.println(" ");
stu=stu+1;
}
System.out.println(" ");
}
}
问题是 FileReader 无法在您的机器中找到文件名 "key.in"。
BufferedReader bf = new BufferedReader(new FileReader("key.in"));
但是,在你朋友的机器上找到了。
BufferedReader.readLine()
returns null
如果到达文件末尾。猜猜你不是在阅读同一个文件。导致NPE的文件可能毕竟是空的
我的朋友和我有完全相同的代码,但只有我的显示空行。我们都是编码的新手,所以我们真的不知道该怎么做,或者如何解决它,尤其是因为它似乎对她有用。 Java 告诉我我的
StringTokenizer st= new StringTokenizer(bf.readLine());
为空。我在网上看到我可以使用 try-catch 方法 运行 我的程序,其中包含空行。但是,我的终端 window 必须以某种方式打印出来(对于我的老师),所以当我 运行 它时,我不能让 try-catch 方法留下额外的打印行。如果有人有任何解决方案,请告诉我!另外,如果有人可以解释一个代码如何对一个人有一个空行,而不是另一个人,那就太好了,因为我真的不知道为什么它对她有用,而不是对我有用。
这是我的完整代码,我指出哪一行包含空行。
import java.util.Scanner;
import java.io.*;
import java.util.*;
public class QuizGrading
{
public static void main (String[]args) throws IOException
{
///key part
System.out.println(" ");
BufferedReader bf = new BufferedReader(new FileReader("key.in"));
StringTokenizer st = new StringTokenizer(bf.readLine()); **(NULL)**
int num = Integer.parseInt(st.nextToken());
int [] key = new int[num];
st=new StringTokenizer(bf.readLine());
for (int i=0; i<num; i++)
{
int an = Integer.parseInt(st.nextToken());
key[i] = an;
}
///answer part
BufferedReader br = new BufferedReader(new FileReader("tenQuizzes.in"));
StringTokenizer answers = new StringTokenizer(br.readLine());
int stu=1;
int numq = Integer.parseInt(answers.nextToken());
for (int u=0; u<numq; u++)
{
int right=0;
answers = new StringTokenizer(br.readLine());
for (int s=0; s<num; s++)
{
int ans=Integer.parseInt(answers.nextToken());
if (ans==key[s])
{
right=right+1;
}
}
double percent = right*100/num;
System.out.println("There are "+right+" questions correct.");
System.out.println("Student "+stu+" scored "+percent+"%.");
System.out.println(" ");
stu=stu+1;
}
System.out.println(" ");
}
}
问题是 FileReader 无法在您的机器中找到文件名 "key.in"。 BufferedReader bf = new BufferedReader(new FileReader("key.in"));
但是,在你朋友的机器上找到了。
BufferedReader.readLine()
returns null
如果到达文件末尾。猜猜你不是在阅读同一个文件。导致NPE的文件可能毕竟是空的