尝试从文本文件中读取时出现NullPointerException

时间:2013-11-11 05:13:40

标签: java nullpointerexception

我正在尝试从文本文件中读取这些名称,但收到错误。这是我的主要方法的相关部分,以及所讨论的方法:

public class Prog4
{
int mostVoteCount = 0;
int mostVotes = 0;
int mostVotesIndex = 0;
int fewestVoteCount = 0;
int fewestVotes = 0;
int fewestVotesIndex = 0;



String[] candidateArray;
int[] votesArray;

public static void main(String args[]) throws Exception
{
  //Scanner stdin = new Scanner(System.in);
  Scanner stdin = new Scanner(new File("test.txt"));
  int num_votes, num_candidates, election_num = 1;

  System.out.println("Welcome to Prog4!\n");
  Prog4 p4 = new Prog4();

  while (stdin.hasNextLine())
  {
     System.out.println("Results for election " + election_num);
     p4.read_candidates(stdin, p4.candidateArray);
     p4.read_votes(stdin, p4.votesArray);
     System.out.println("Total votes: " + p4.votesArray.length);



  }

 System.out.println("Done. Normal termination of Prog4.");
}

和问题的方法:

public void read_candidates(Scanner stdin, String candidates[])
{
   int candidateCount = 0;
   candidateCount = (stdin.nextInt());

   for (int i = 0; i < candidateCount; i++)
      candidates[i] = (stdin.next());
}

这是我在“测试”文本文件中使用的测试数据:

4

欧文

杰克

斯科特

罗比

15 0 1 1 2 3 1 0 0 0 0 1 2 2 1 1

这是堆栈跟踪吗?

java.lang.NullPointerException

at Prog4.read_candidates(Prog4.java:75)

at Prog4.main(Prog4.java:35)

4 个答案:

答案 0 :(得分:1)

您永远不会实例化candidateArrayvotesArray,因此当您将它们传递给read_candidates方法时它们为空。我猜这是失败的:

candidates[i] = (stdin.next());

您基本上是尝试使用null对象(在这种情况下为candidates对象)。在您的代码中的某些时候,在尝试使用它们之前,您必须执行类似candidateArray= new String[]的操作,以及votesArray的相同操作。

答案 1 :(得分:1)

您需要在执行作业之前初始化阵列“候选人”

public void read_candidates(Scanner stdin, String candidates[]) {

        int candidateCount = 0;
        candidateCount = (stdin.nextInt()); 
        candidates = new String[candidateCount]; // here initialize your array
        for (int i = 0; i < candidateCount && stdin.hasNext(); i++){
            String data = stdin.next();
            System.out.print(data  + " ");
            candidates[i] = data;
        }
    }

答案 2 :(得分:0)

它可能是一个outofobound exaception所以请小心使用candidateCount =(stdin.nextInt());

你可能在这里得到例外所以​​正确计算长度candidateCount = candidates.length;

答案 3 :(得分:0)

检查test.txt的位置。根据跟踪,传递给read_candidates的Scanner对象为null。确保您可以从指定位置读取文件。