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

Java减少if语句使用:无数组实现选举结果判定方案咨询

解决思路与简洁实现

嘿,这个问题确实有点意思——不能用数组,还要尽量少写if,同时得覆盖所有要求的选举场景。我来给你分享一个既符合规则又简洁的实现方案:

核心规则梳理

先把选举的判定逻辑理清楚,避免后续写冗余代码:

  • 直接获胜:某候选人得票超过总票数的50%(注意是“超过”,比如总票100的话,得51才算赢);
  • 第二轮场景:
    1. 4人全进:要么4人得票完全相同,要么出现两组两两并列(比如A=30、B=30、C=20、D=20),且没人得票过半;
    2. 2人进:要么仅2人得票并列最高且高于其他人,要么最高票仅1人但未过半(此时最高票者+次高票者进第二轮)。

完整代码实现

import java.util.Scanner;

public class ElectionResult {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 输入4名候选人得票数(A、B、C、D)
        System.out.println("请输入4名候选人的得票数:");
        int vA = scanner.nextInt();
        int vB = scanner.nextInt();
        int vC = scanner.nextInt();
        int vD = scanner.nextInt();
        scanner.close();
        
        // 计算总票数
        int total = vA + vB + vC + vD;
        
        // 输出所有候选人得票数
        System.out.println("\n候选人得票数统计:");
        System.out.println("A: " + vA);
        System.out.println("B: " + vB);
        System.out.println("C: " + vC);
        System.out.println("D: " + vD);
        
        // 找出最高票数(只用if,不用数组/工具类)
        int max = vA;
        if (vB > max) max = vB;
        if (vC > max) max = vC;
        if (vD > max) max = vD;
        
        // 统计得最高票的人数
        int countMax = 0;
        if (vA == max) countMax++;
        if (vB == max) countMax++;
        if (vC == max) countMax++;
        if (vD == max) countMax++;
        
        // 判断是否有直接获胜者
        boolean hasWinner = false;
        if (max > total / 2 && countMax == 1) {
            hasWinner = true;
            System.out.print("获胜者:");
            if (vA == max) System.out.println("A");
            else if (vB == max) System.out.println("B");
            else if (vC == max) System.out.println("C");
            else System.out.println("D");
        }
        
        // 处理第二轮选举情况
        if (!hasWinner) {
            System.out.println("\n需要进行第二轮选举,进入的候选人:");
            // 场景1:4人全部进入
            boolean isFourWayTie = (countMax == 4) || 
                                   (countMax == 2 && ((vA == vB && vC == vD && vA != vC) || 
                                                     (vA == vC && vB == vD && vA != vB) || 
                                                     (vA == vD && vB == vC && vA != vB)));
            if (isFourWayTie) {
                System.out.println("A、B、C、D");
            } 
            // 场景2:仅2人进入
            else {
                // 找出次高票数(只用if)
                int secondMax = 0;
                if (vA != max && vA > secondMax) secondMax = vA;
                if (vB != max && vB > secondMax) secondMax = vB;
                if (vC != max && vC > secondMax) secondMax = vC;
                if (vD != max && vD > secondMax) secondMax = vD;
                
                // 拼接进入第二轮的候选人名单
                String candidates = "";
                if (vA == max || vA == secondMax) candidates += "A、";
                if (vB == max || vB == secondMax) candidates += "B、";
                if (vC == max || vC == secondMax) candidates += "C、";
                if (vD == max || vD == secondMax) candidates += "D、";
                
                // 移除最后一个顿号并输出
                System.out.println(candidates.substring(0, candidates.length() - 1));
            }
        }
    }
}

代码优化说明

  1. 严格遵守规则:全程没用到数组,核心逻辑用if实现,仅用了基础的变量和字符串拼接;
  2. 减少冗余if:先提取最高票、得最高票人数这些关键值,避免重复判断;
  3. 场景全覆盖:包含了题目要求的2人、4人进第二轮的所有情况,同时处理了最高票仅1人未过半的场景;
  4. 逻辑清晰:先判断直接获胜,再处理第二轮,代码结构一目了然,后期好维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:59:29