我的代码有什么问题,看起来正确,但事实并非如此
What's wrong with my code, it seems correctly, but it's not
问题是我必须读取一个文本文件。我有 24 个候选人,1-24 中的每个数字对应候选人 1、2、3、4、5 ....、24。(即:如果数字 1 在文本文件中出现 10 次,则表示第一个候选人有10票。但是,我不知道为什么我只能打印出前9个候选人。我想把每个人都打印出来,谁能告诉我哪里错了?
这是我的votes.txt:cs.jhu.edu/~jason/226/hw6/data/ballots
所以,这是我的代码
import java.io.*;
import java.util.PriorityQueue;
public class ElectionTieBreaker {
static String line;
public static int highestLocation(int[] x){
int max = 0, value = 0;
for (int i=0; i<x.length; i++){
if (x[i] > max){
max = x[i];
value = i;
}
}
return value;
}
public static void main(String[] args) throws IOException {
PriorityQueue<Integer> listpeople = new PriorityQueue<Integer>();
FileReader file = new FileReader("C:\votes.txt");
BufferedReader in = new BufferedReader(file);
while ((line = in.readLine()) != null) {
int a = Integer.parseInt(line);
listpeople.add(a);
}
in.close();
int[] candidates = new int[24];
for (int i = 0; i <= listpeople.size(); i++) {
int x = listpeople.poll();
candidates[x-1]++;
}
for (int i = 0; i < 24; i++) {
int next = highestLocation(candidates);
System.out.println((next+1) + " " + candidates[next]);
candidates[next] = 0;
}
}
}
每次调用 poll
时,它都会减小 PriorityQueue
的大小,但每次调用时都会增加 i
。这意味着 i
和 PriorityQueue
的大小在中间相遇。
考虑使用更像...
while (!listpeople.isEmpty()) {
int x = listpeople.poll();
candidates[x - 1]++;
}
所有这一切都会继续循环,直到 PriorityQueue
...
中没有更多元素
问题是我必须读取一个文本文件。我有 24 个候选人,1-24 中的每个数字对应候选人 1、2、3、4、5 ....、24。(即:如果数字 1 在文本文件中出现 10 次,则表示第一个候选人有10票。但是,我不知道为什么我只能打印出前9个候选人。我想把每个人都打印出来,谁能告诉我哪里错了? 这是我的votes.txt:cs.jhu.edu/~jason/226/hw6/data/ballots 所以,这是我的代码
import java.io.*;
import java.util.PriorityQueue;
public class ElectionTieBreaker {
static String line;
public static int highestLocation(int[] x){
int max = 0, value = 0;
for (int i=0; i<x.length; i++){
if (x[i] > max){
max = x[i];
value = i;
}
}
return value;
}
public static void main(String[] args) throws IOException {
PriorityQueue<Integer> listpeople = new PriorityQueue<Integer>();
FileReader file = new FileReader("C:\votes.txt");
BufferedReader in = new BufferedReader(file);
while ((line = in.readLine()) != null) {
int a = Integer.parseInt(line);
listpeople.add(a);
}
in.close();
int[] candidates = new int[24];
for (int i = 0; i <= listpeople.size(); i++) {
int x = listpeople.poll();
candidates[x-1]++;
}
for (int i = 0; i < 24; i++) {
int next = highestLocation(candidates);
System.out.println((next+1) + " " + candidates[next]);
candidates[next] = 0;
}
}
}
每次调用 poll
时,它都会减小 PriorityQueue
的大小,但每次调用时都会增加 i
。这意味着 i
和 PriorityQueue
的大小在中间相遇。
考虑使用更像...
while (!listpeople.isEmpty()) {
int x = listpeople.poll();
candidates[x - 1]++;
}
所有这一切都会继续循环,直到 PriorityQueue
...