You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

投票统计程序优化:仅显示非零票数的排名结果

投票程序优化方案:仅显示非零票数的排名

问题分析

你当前的核心问题是:程序会强制输出第一、第二、第三名的标题及结果,哪怕对应排名的票数为0;同时把显示逻辑塞进循环后导致重复输出。要解决的两个核心点是:过滤掉票数为0的无效排名,并且给每个有效排名只输出一次对应标题。

解决思路

  1. 先收集所有候选人的票数数据,过滤掉票数为0的条目
  2. 对剩下的有效候选人按票数降序排序
  3. 遍历排序后的列表,只取前3名,根据当前遍历的位置生成对应排名标题,逐一输出即可

代码示例

假设你原有代码的简化结构如下,以下是优化后的完整代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

class Candidate {
    String name;
    int votes;

    public Candidate(String name, int votes) {
        this.name = name;
        this.votes = votes;
    }
}

public class VotingApp {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Candidate> candidates = new ArrayList<>();

        // 引导用户输入候选人票数(这里以3个候选人为例,可扩展为动态输入)
        System.out.println("输入候选人A的票数:");
        candidates.add(new Candidate("A", scanner.nextInt()));
        System.out.println("输入候选人B的票数:");
        candidates.add(new Candidate("B", scanner.nextInt()));
        System.out.println("输入候选人C的票数:");
        candidates.add(new Candidate("C", scanner.nextInt()));

        // 过滤票数为0的候选人,按票数降序排序
        List<Candidate> validCandidates = new ArrayList<>();
        for (Candidate c : candidates) {
            if (c.votes > 0) {
                validCandidates.add(c);
            }
        }
        Collections.sort(validCandidates, (a, b) -> Integer.compare(b.votes, a.votes));

        // 输出有效排名(最多显示前三)
        for (int i = 0; i < validCandidates.size() && i < 3; i++) {
            Candidate current = validCandidates.get(i);
            String rankTitle;
            switch (i) {
                case 0:
                    rankTitle = "第一名";
                    break;
                case 1:
                    rankTitle = "第二名";
                    break;
                case 2:
                    rankTitle = "第三名";
                    break;
                default:
                    rankTitle = "";
            }
            System.out.println("=== " + rankTitle + " ===");
            System.out.println("候选人:" + current.name + ",票数:" + current.votes);
        }

        scanner.close();
    }
}

效果对比

  • 原问题输出(比如B、C票数为0时):

=== 第一名 ===
候选人:A,票数:10
=== 第二名 ===
候选人:B,票数:0
=== 第三名 ===
候选人:C,票数:0

  • 优化后输出:

=== 第一名 ===
候选人:A,票数:10

若有两个有效票数(A10、B5、C0),输出:

=== 第一名 ===
候选人:A,票数:10
=== 第二名 ===
候选人:B,票数:5

关键说明

  • 用validCandidates列表过滤掉票数为0的候选人,直接排除无效排名
  • 通过i < 3限制最多显示前三名,符合需求
  • 循环内通过索引i生成对应排名标题,每个有效排名只输出一次标题,彻底解决重复输出问题

内容的提问来源于stack exchange,提问作者user20758216

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:45:30