有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我的代码有什么问题,似乎是正确的,但事实并非如此

问题是我必须读一个文本文件。我有24名候选人,1-24之间的每个数字对应于候选人1、2、3、4、5。。。。,24.(即:如果数字1在文本文件中出现10次,则表示第一位候选人有10张选票。然而,我不知道为什么我只能打印出前9位候选人。我想打印出所有人,有人能告诉我哪里出错了吗? 这是我的选票。文本:cs。朱。edu/~jason/226/hw6/数据/选票 这是我的代码

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;
        }
    }
 }

共 (1) 个答案

  1. # 1 楼答案

    每次调用poll,它都会减小PriorityQueue的大小,但每次调用时都会增加i。这意味着^ {< CD3}}和^ {< CD2}}的大小在中间相遇。

    请考虑使用更像……的东西。p>

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

    所有这些都会继续循环,直到PriorityQueue中没有更多元素为止