0

我正在尝试从文本文件中读取这些名称,但出现错误。这是我的主要方法的相关部分,以及有问题的方法:

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

4 回答 4

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;
        }
    }
于 2013-11-11T05:45:52.713 回答
1

你永远不会实例化你的candidateArrayand votesArray,所以当你将它们传递给read_candidates方法时它们是 null 。我猜它在线上失败了:

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

您基本上是在尝试使用空对象(本例中的对象)做某事candidates。在您的代码中的某个时刻,您必须在尝试使用它们之前candidateArray= new String[]对, 执行类似的操作。votesArray

于 2013-11-11T05:21:44.657 回答
0

它可能是出站异常,所以请小心行候选计数 = (stdin.nextInt());

您可能会在此处遇到异常,因此请正确计算长度 CandidateCount = Candidates.length;

于 2013-11-11T05:21:56.827 回答
0

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

于 2013-11-11T05:22:19.940 回答