Java数组投票程序平局处理功能实现方案咨询
投票程序平局功能实现方案
实现思路
不需要专门定位数组中的重复值,按两步遍历即可完成需求:
- 第一轮遍历所有得票数,统计出全局最高得票数值
- 第二轮遍历所有候选人,筛选出得票数等于最高值的全部对象,即为并列最高的结果
注意:你原有代码存在两个会直接导致运行错误的问题,会在修正版中一并修复:
- 第一个录入的候选人姓名、票数未存入对应数组,存在数据丢失
- 存储最高票索引的变量
kohta被错误赋值为得票数值而非数组下标,运行时会触发数组索引越界异常
修正后完整代码
import java.util.Scanner; import java.util.ArrayList; public class ArraysVoting { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter the number of candidates:"); int candidateCount = scanner.nextInt(); int[] votes = new int[candidateCount]; String[] candidates = new String[candidateCount]; // 统一循环录入所有候选人信息,避免首个候选人数据丢失 for (int i = 0; i < candidateCount; i++) { System.out.print("Enter candidate's name:"); String name = scanner.next(); candidates[i] = name; System.out.print("Enter " + candidates[i] + "'s votes:"); votes[i] = scanner.nextInt(); } // 第一步:查询全局最高得票数 int maxVote = votes[0]; for (int i = 1; i < votes.length; i++) { if (votes[i] > maxVote) { maxVote = votes[i]; } } // 第二步:收集所有得票等于最高值的候选人 ArrayList<String> topCandidates = new ArrayList<>(); for (int i = 0; i < votes.length; i++) { if (votes[i] == maxVote) { topCandidates.add(candidates[i]); } } System.out.println(); // 根据最高票人数输出对应结果 if (topCandidates.size() == 1) { System.out.println(topCandidates.get(0) + " is the winner with " + maxVote + " votes!"); } else { System.out.println("Tie! The following candidates all got the highest " + maxVote + " votes:"); for (String candidate : topCandidates) { System.out.println("- " + candidate); } } scanner.close(); } }
逻辑说明
- 录入阶段通过统一循环处理所有候选人,从根源上避免首个候选人数据丢失的问题
- 第一轮遍历仅记录最高得票的数值,不需要提前绑定候选人索引,逻辑更简洁
- 第二轮遍历直接比对得票与最高值,符合条件的候选人统一加入结果列表,天然支持2人及以上的平局场景,无需额外编写重复值检测逻辑
- 最终根据结果列表的长度判断是单人胜出还是平局,输出对应提示文案即可
内容的提问来源于stack exchange,提问作者Enerqia
相关产品推荐
相关产品推荐

