
本教程讲解如何优化投票统计程序,使其仅在某一名次(如第二、第三)实际获得票数时才输出对应信息,跳过票数为零的名次,提升结果展示的准确性与可读性。
在实现投票结果排序与展示时,一个常见但易被忽略的问题是:即使某一名次(如“Third Place”)得票数为 0,程序仍会打印该标题并留空,造成误导或冗余输出。根本原因在于——标题打印逻辑与数据查找逻辑未解耦,且缺乏对票数有效性的前置判断。
解决思路非常清晰:先判断 firstScore、secondScore、thirdScore 是否非零,再决定是否执行对应名次的标题输出与候选人检索。这避免了“标题先行、内容为空”的尴尬,也杜绝了在循环内打印标题导致的重复输出风险。
以下是重构后的推荐写法(基于您原有的数组结构 Array[] 存储票数,stringArray[] 存储候选人姓名):
// ✅ Winner (always shown, assuming at least one vote exists)
System.out.print("Winner: ");
for (int i = 0; i < Array.length; i++) {
if (Array[i] != 0 && Array[i] == firstScore) {
System.out.print(stringArray[i] + " ");
}
}
System.out.println(); // 使用 println 换行更简洁
// ✅ Second Place — 仅当 secondScore > 0 时才显示
if (secondScore > 0) {
System.out.print("Second: ");
for (int i = 0; i < Array.length; i++) {
if (Array[i] != 0 && Array[i] == secondScore) {
System.out.print(stringArray[i] + " ");
}
}
System.out.println();
}
// ✅ Third Place — 同理,严格校验 thirdScore > 0
if (thirdScore > 0) {
System.out.print("Third: ");
for (int i = 0; i < Array.length; i++) {
if (Array[i] != 0 && Array[i] == thirdScore) {
System.out.print(stringArray[i] + " ");
}
}
System.out.println();
}⚠️ 关键注意事项:
- 使用 secondScore > 0(而非 != 0)更语义准确,因为票数不可能为负;
- 标题(如 "Second: ")必须放在 if 条件块内部,确保“有数据才展示标题”;
- 若存在并列名次(例如两人同获第二高票),当前循环逻辑天然支持多候选人输出,无需额外修改;
- 建议将重复的查找逻辑封装为私有方法(如 printCandidates(int targetScore, String title)),进一步提升可维护性。
通过这一改进,输出将从冗余的:
Third: Second: Joey Winner: Miles
变为干净专业的:
Second: Joey Winner: Miles
真正实现“所见即所得”,让投票结果摘要既准确又简洁。









