我遇到了创建一个java程序的问题,该程序记录了每个候选人的投票。我们应该使用数组;然而,我们只是教他们,我不太关注如何解决这个问题。
我们应该读取的文件是:
4 7
2 10
3 2
3 4
4 5
5 6
7 9
0 12
1 2
3 45
6 9
55 19
-4 11
4 4
3 -21
左栏是候选人编号,右边是投票数。
第一列只能是1-10的整数。第二个可以是任何正值。 最后,该计划应该将每个候选人的总票数加在一起。
我认为我们需要一个类似的数组:int[] cands = new int[10]
它指定候选数字。但是,我不明白如何组织这些值。对不起,如果这似乎混乱..我不知道如何解释这一点,因为我有点困惑。我需要的不仅仅是一个阵列吗?
以下是方向的摘要:
此文件中的每一行包含两个数字:第一个是候选标识符(1-10),第二个是候选人收到的投票数。您的程序将使用数组计算每个候选人的投票数,其中每个数组条目代表一个候选人。请注意,每个数组条目都充当该候选者的投票累加器。
编辑:这是我到目前为止所拥有的......
public static void main(String[] args) throws IOException {
File file = new File("Tally.txt");
Scanner input = new Scanner(file);
int[] cands = new int[10];
int cnt = 0;
while (input.hasNextLine()) {
int cand = input.nextInt() - 1;
int vote = input.nextInt();
if ((cand >= 0 && cand < cands.length) && vote > 0) {
cands[cand] += vote;
}
}
System.out.println("Canidate: \t Votes:");
for (int index = 1; index < cands.length + 1; index++) {
if (cnt < cands.length) {
System.out.println("\t " + index + "\t\t" + cands[cnt]);
cnt++;
}
}
input.close();
}
}
但是,一旦它在文件中达到负值或大于10的值,它就会抛出各种错误(例如java.util.NoSuchElementException)。我怎么能避免这个?
答案 0 :(得分:0)
您使用刚刚添加的代码完成了出色的工作!只剩下两件事需要解决。
首先,您的int[] cands
长度为9,但您有10名候选人。如果你有new int[9]
那么它的索引从0到8,因为它有9并且它们从0开始。你应该考虑当你遇到候选人10时会发生什么。
其次,这是您对文件的描述:
第一列只能是1-10的整数。第二个可以是任何正值。最后,该计划应该将每位候选人的总票数加在一起。
从中可以清楚地看出,不应该遇到任何负数,或者任何大于10的候选数字!但是你提供的文件在最后四行中出现了严重错误:候选人数为55,其中一人为-4,投票数为-21。所以要么文件与问题的描述不匹配(在这种情况下你需要回去投诉),或者你还没有告诉我们你的问题。应该使用与规格不匹配的线条。 (但实际上你的代码看起来好像忽略了不匹配的行。)