
本教程讲解如何优化投票统计程序,使其仅在某一名次(如第二、第三)实际存在非零得票时才输出对应结果,避免显示“third: ”等空行。核心思路是先判断票数是否为零,再决定是否执行查找与打印逻辑。
在当前投票程序中,firstScore、secondScore 和 thirdScore 已通过排序或比较逻辑确定,但无论其值是否为 0,程序都会无条件打印对应名次标题(如 "Third: "),导致输出冗余甚至误导(例如 Third: 后无任何候选人)。解决的关键在于:将打印标题与遍历查找逻辑整体封装在条件判断中,仅当该名次票数 > 0 时才执行。
以下是优化后的完整代码片段(基于您原有的结构):
// 仅当第一名有有效票数时显示 Winner
if (firstScore > 0) {
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
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
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();
}✅ 关键改进说明:
- 使用 if (score > 0) 而非 if (score != 0) 更符合业务语义(票数不可能为负,> 0 即表示真实有效得票);
- 每个名次块独立判断,互不影响,逻辑清晰且易于维护;
- 统一使用 System.out.println() 替代 System.out.print("\n"),提升可读性与健壮性;
- 条件判断位于外层,彻底避免了“标题已输出但无内容”的问题。
⚠️ 注意事项:
- 确保 firstScore、secondScore、thirdScore 在进入此段代码前已完成正确计算(例如通过 Arrays.sort() 或手动比较得出前三名票数);
- 若存在并列情况(如两人同获第二高票),当前循环逻辑会自然输出所有并列者,这是合理行为;
- 建议将重复的查找逻辑封装为私有方法(如 printCandidates(int targetScore, String title)),进一步提升代码复用性与可测试性。
通过这一优化,程序输出将严格反映真实投票结果——得票为 0 的名次完全静默,界面更专业,用户体验更清晰。









