Java中如何获取并显示数值最高的对应变量名称
问题原因
Java运行时无法获取基本类型变量的变量名信息,你直接将三个int类型的得票数值放入集合取最大值,最终只能拿到数值结果,无法关联到对应的候选人标识。
解决方案
方案1:使用Map存储候选人与得票的映射(最推荐)
通过键值对直接绑定候选人名称和对应得票数,遍历取最大值即可:
import java.util.Collections; import java.util.HashMap; import java.util.Map; // 构建候选人-得票数映射 Map<String, Integer> voteMap = new HashMap<>(); voteMap.put("candidate1", candidate1); voteMap.put("candidate2", candidate2); voteMap.put("candidate3", candidate3); // 取获得最高票数的条目 Map.Entry<String, Integer> maxEntry = Collections.max(voteMap.entrySet(), Map.Entry.comparingByValue()); System.out.println("获胜的候选人是:" + maxEntry.getKey());
方案2:自定义实体类/Record封装数据
如果后续还有其他候选人相关的属性需要扩展,可以用类封装信息:
import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; // JDK16及以上可以用Record简化定义 record Candidate(String name, int votes) {} public class VoteTest { public static void main(String[] args) { int candidate1 = 10, candidate2 = 25, candidate3 = 17; List<Candidate> candidateList = Arrays.asList( new Candidate("candidate1", candidate1), new Candidate("candidate2", candidate2), new Candidate("candidate3", candidate3) ); // 按得票数排序取最大值 Candidate winner = Collections.max(candidateList, Comparator.comparingInt(Candidate::votes)); System.out.println("获胜的候选人是:" + winner.name()); } }
方案3:极简判断适配(仅适合固定少量候选人的场景)
如果不想改动现有代码结构,候选人数量固定且很少,也可以直接加判断分支:
int largest = Collections.max(Arrays.asList(candidate1, candidate2, candidate3)); String winnerName; if (largest == candidate1) { winnerName = "candidate1"; } else if (largest == candidate2) { winnerName = "candidate2"; } else { winnerName = "candidate3"; } System.out.println("获胜的候选人是:" + winnerName + "!");
内容的提问来源于stack exchange,提问作者draven256
相关产品推荐
相关产品推荐

