我正在尝试从文本文件中读取这些名称,但收到错误。这是我的主要方法的相关部分,以及所讨论的方法:
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)
答案 0 :(得分:1)
您永远不会实例化candidateArray
和votesArray
,因此当您将它们传递给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。确保您可以从指定位置读取文件。