Java 什么';我的代码似乎有问题,但它';不是

Java 什么';我的代码似乎有问题,但它';不是,java,priority-queue,Java,Priority Queue,问题是我必须读一个文本文件。我有24名候选人,1-24之间的每个数字对应于候选人1、2、3、4、5、24。(即:如果数字1在文本文件中出现10次,则表示第一位候选人有10票。但是,我不知道为什么我只能打印前9位候选人。我想打印每个人,有人能告诉我哪里出错了吗? 这是我的选票。txt:cs.jhu.edu/~jason/226/hw6/data/ballots 这是我的代码 import java.io.*; import java.util.PriorityQueue; public clas

问题是我必须读一个文本文件。我有24名候选人,1-24之间的每个数字对应于候选人1、2、3、4、5、24。(即:如果数字1在文本文件中出现10次,则表示第一位候选人有10票。但是,我不知道为什么我只能打印前9位候选人。我想打印每个人,有人能告诉我哪里出错了吗? 这是我的选票。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;
        }
    }
 }
import java.io.*;
导入java.util.PriorityQueue;
公共类选举决胜局{
静态弦线;
公共静态int最高位置(int[]x){
int max=0,value=0;
对于(int i=0;i max){
max=x[i];
值=i;
}
}
返回值;
}
公共静态void main(字符串[]args)引发IOException{
PriorityQueue listpeople=新建PriorityQueue();
FileReader文件=新的FileReader(“C:\\vows.txt”);
BufferedReader in=新的BufferedReader(文件);
而((line=in.readLine())!=null){
int a=整数.parseInt(行);
增加(a);
}
in.close();
int[]候选者=新int[24];

对于(int i=0;i每次调用<代码> Poope<代码>时,它减少了 PrimeRealQue>/Cord>的大小,但每次您增加代码<>代码< I/COD>。这意味着<代码> i <代码>和<代码> PrimeRealQue>/Cult>的大小在中间相遇。

考虑使用更像

while (!listpeople.isEmpty()) {
    int x = listpeople.poll();
    candidates[x - 1]++;
}

所有这些操作都会继续循环,直到每次调用
listpeople.poll()时,
优先级队列中不再有元素
它减少了
列表人员的大小,因此您提前满足了循环的退出条件…@MadProgrammer,谢谢,我想我看到了。您可以建议我如何解决此问题吗?请使用
之类的方法,而(!listpeous.isEmpty()){
代替。。。