【问题标题】:Two people with the same code, only one has a NullPointerException?两个人的代码一样,只有一个人有 NullPointerException?
【发布时间】:2016-03-16 23:28:14
【问题描述】:

我的朋友和我的代码完全相同,但只有我的代码显示为空行。我们都对编码很陌生,所以我们真的不知道该做什么或如何解决它,尤其是因为它似乎对她有用。 Java 告诉我我的

StringTokenizer st= new StringTokenizer(bf.readLine()); 

为空。我在网上读到我可以使用 try-catch 方法来运行我的程序,其中包含空行。但是,我的终端窗口必须以某种方式打印出来(对于我的老师),所以我不能让 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(" ");
}

}

【问题讨论】:

  • 您的 Java 程序很可能找不到文件 key.in,因此当您尝试访问它时会得到一个 NullPointerException
  • key.in 文件为空检查一下。
  • 您不应该使用裸露的FileReader;这将使用您平台的默认字符编码,并且可能因平台而异。另外,这是 2015 年,所以请改用 Files.newBufferedReader()

标签: java arrays nullpointerexception bluej stringtokenizer


【解决方案1】:

问题是 FileReader 无法在您的机器中找到文件名“key.in”。 BufferedReader bf = new BufferedReader(new FileReader("key.in"));

但是,它是在你朋友的机器上找到的。

【讨论】:

  • 那么它将是一个 IOFileNotFound 异常,而不是一个 nullPointerException
  • 同意 BetaRide 的回答。
【解决方案2】:

BufferedReader.readLine() 如果到达文件末尾,则返回null。猜你不是在读同一个文件。导致 NPE 的文件毕竟可能是空的。

【讨论】:

  • 我重新下载了 key.in 和 tenQuizzes.in 文件,它成功了!看来我的 key.in 文件是空的......很奇怪,考虑到我只是从以前的同一个地方下载它。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多