Java 计票

Java 计票,java,Java,我面临的问题是创建一个java程序来统计每个候选人的选票。我们应该使用数组;然而,我们只是被教给他们,我不太明白如何解决这个问题 我们应该从中读取的文件是: 47 210 3.2 34 4.5 5.6 7.9 0 12 1 2 345 6.9 55 19 -4.11 4.4 3-21 左栏为候选人编号,右栏为票数 第一列只能是1-10之间的整数。第二个可以是任何正值。 最后,该计划应该将每个候选人的总投票数相加 我认为我们需要一个类似这样的数组:int[]cands=newint[10]它指定候

我面临的问题是创建一个java程序来统计每个候选人的选票。我们应该使用数组;然而,我们只是被教给他们,我不太明白如何解决这个问题

我们应该从中读取的文件是:

47

210

3.2

34

4.5

5.6

7.9

0 12

1 2

345

6.9

55 19

-4.11

4.4

3-21

左栏为候选人编号,右栏为票数

第一列只能是1-10之间的整数。第二个可以是任何正值。 最后,该计划应该将每个候选人的总投票数相加

我认为我们需要一个类似这样的数组:
int[]cands=newint[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();
}
publicstaticvoidmain(字符串[]args)引发IOException{
File File=新文件(“Tally.txt”);
扫描仪输入=新扫描仪(文件);
int[]cands=新的int[10];
int-cnt=0;
while(input.hasNextLine()){
int cand=input.nextInt()-1;
int vote=input.nextInt();
如果((坎德>=0&&坎德<坎德长度)&&vote>0){
坎德[坎德]+=投票;
}
}
System.out.println(“Canidate:\t投票:”;
对于(int index=1;index
}


但是,一旦它在文件中达到负值或大于10的值,它就会抛出各种错误(例如java.util.NoTouchElementException)。如何避免这种情况?

您刚才添加的代码做得非常好!只有两件事需要解决

首先,您的
int[]cands
长度为9,但您有10个候选项。如果您有一个
newint[9]
,那么它的索引从0到8,因为有9个,它们从0开始。你应该想想当你遇到候选人10时会发生什么

其次,这是您对该文件的描述:

第一列只能是1-10之间的整数。第二个可以是任何正值。最后,该计划应该将每个候选人的总投票数相加


很明显,不应该遇到任何负数,或者任何大于10的候选数!但是,正如你所说的,这份文件在最后四行出现了严重错误:候选人人数为55人,其中一人为-4人,计票结果为-21人。因此,要么文件与问题描述不匹配(在这种情况下,您需要返回并投诉),要么您没有告诉我们您应该如何处理与规范不匹配的行(但事实上,您的代码似乎在忽略不匹配的行方面做得很好)

这是我的问题所在。你很好地解释了老师给你的问题。我知道怎么解决,我可以给你答案。然而,我看不出你自己在解决这个问题上付出了任何努力。有人可能会给你答案,希望获得一些声誉,但如果你找到一个资源并自学,或者向老师寻求帮助,然后自己做这个问题,你会过得更好(然后在尝试并得到错误后,来寻求帮助)。让我们玩“假设”游戏。如您所述,如果您有一对数组呢?您将如何编写代码?首先将问题分成小块问题。谷歌为他们每个人。这是订单。。。如何读取文件内容。然后了解如何使用scanner逐个读取数字,这可以通过使用scanner来完成,也可以将整个文件读取为字符串并将其拆分多次以将所有数字读取到数组中。您可以创建两个数组来存储候选人和投票。或者可以使用Hashmap,其中键是候选人id,值是投票。在尝试添加候选项时,请使用map.contains检查候选项是否已存在,如果它是一个数组,请添加两个元素—数组的索引和存储在其中的值。想一想如何利用这两个要素来完成你们需要的东西嘿,伙计们,我想我已经开始明白这一点了。我在编辑中添加了一段代码。谢谢!与规格不匹配的行应该被忽略,并移到下一个整数。我现在要添加我的更完整的代码,因为它有更多的内容。