根据java案例,累计犯规次数已到危险?

wen java案例 1

Java案例:累计犯规次数已达危险

下面通过一个完整的Java案例来演示累计犯规次数达到危险阈值的判定逻辑。

根据java案例,累计犯规次数已到危险?

案例场景

在体育比赛(如篮球、足球)系统中,需要实时监控球员的犯规次数,当累计犯规达到一定阈值时,触发"危险"预警,提示教练或裁判注意。

  • 犯规次数 ≥ 5:危险(可能被罚下场)
  • 犯规次数 = 4:警告
  • 犯规次数 < 4:正常

完整代码实现

/**
 * 球员犯规监控系统
 * 演示累计犯规次数达到危险阈值的判定
 */
public class FoulMonitor {
    // 危险犯规阈值
    private static final int DANGER_THRESHOLD = 5;
    // 警告犯规阈值
    private static final int WARNING_THRESHOLD = 4;
    /**
     * 判断犯规等级
     */
    public static String checkFoulLevel(int foulCount) {
        if (foulCount >= DANGER_THRESHOLD) {
            return "危险";
        } else if (foulCount >= WARNING_THRESHOLD) {
            return "警告";
        } else {
            return "正常";
        }
    }
    /**
     * 输出球员犯规状态
     */
    public static void printFoulStatus(String playerName, int foulCount) {
        String level = checkFoulLevel(foulCount);
        System.out.printf("球员【%s】累计犯规 %d 次 → 状态:%s%n",
                playerName, foulCount, level);
        switch (level) {
            case "危险":
                System.out.println("  ⚠️  已达危险!该球员面临被罚下场的风险!");
                break;
            case "警告":
                System.out.println("  ⚡ 警告:再犯规一次将进入危险状态。");
                break;
            default:
                System.out.println("  ✅ 状态正常。");
        }
    }
    public static void main(String[] args) {
        // 模拟球员在不同阶段的犯规次数
        String player = "张伟";
        int[] foulRecords = {1, 2, 3, 4, 5, 6};
        System.out.println("===== 犯规累计监控 =====");
        for (int foul : foulRecords) {
            printFoulStatus(player, foul);
            System.out.println("------------------------");
        }
    }
}

运行结果

===== 犯规累计监控 =====
球员【张伟】累计犯规 1 次 → 状态:正常
  ✅ 状态正常。
------------------------
球员【张伟】累计犯规 2 次 → 状态:正常
  ✅ 状态正常。
------------------------
球员【张伟】累计犯规 3 次 → 状态:正常
  ✅ 状态正常。
------------------------
球员【张伟】累计犯规 4 次 → 状态:警告
  ⚡ 警告:再犯规一次将进入危险状态。
------------------------
球员【张伟】累计犯规 5 次 → 状态:危险
  ⚠️  已达危险!该球员面临被罚下场的风险!
------------------------
球员【张伟】累计犯规 6 次 → 状态:危险
  ⚠️  已达危险!该球员面临被罚下场的风险!
------------------------

面向对象版本(推荐)

更贴近真实业务的写法,用类封装球员信息:

class Player {
    private String name;
    private int foulCount;
    private static final int DANGER_THRESHOLD = 5;
    public Player(String name) {
        this.name = name;
        this.foulCount = 0;
    }
    /** 累计一次犯规 */
    public void addFoul() {
        foulCount++;
    }
    /** 是否已达危险 */
    public boolean isDangerous() {
        return foulCount >= DANGER_THRESHOLD;
    }
    /** 状态描述 */
    public String getStatus() {
        if (foulCount >= DANGER_THRESHOLD) return "危险";
        if (foulCount == DANGER_THRESHOLD - 1) return "警告";
        return "正常";
    }
    @Override
    public String toString() {
        return String.format("球员 %s | 犯规 %d 次 | 状态:%s",
                name, foulCount, getStatus());
    }
}
public class FoulDemo {
    public static void main(String[] args) {
        Player p = new Player("李强");
        for (int i = 0; i < 6; i++) {
            p.addFoul();
            System.out.println(p);
            if (p.isDangerous()) {
                System.out.println("  >>> 该球员已到危险犯规次数,");
            }
        }
    }
}

关键点总结

要点 说明
阈值判定 使用 if-else if-else 或 switch 按次数分级
常量定义 用 static final 定义阈值,便于修改(如足球5次、篮球5次、排球不同规则)
实时监控 每次犯规后调用 addFoul() 并重新判定
业务扩展 可加入数据库存储、UI 提示、裁判通知等

常见面试追问

Q1:如果阈值会随比赛规则动态变化怎么办?

将阈值改为可配置参数,从配置文件或数据库读取,而不是硬编码常量。

Q2:如何判断"连续犯规" vs "累计犯规"?

累计犯规只需累加计数;连续犯规需额外记录时间戳或节次,用队列或滑动窗口实现。

Q3:多线程环境下如何保证计数准确?

使用 AtomicInteger 或对 addFoul() 方法加 synchronized。

import java.util.concurrent.atomic.AtomicInteger;
private AtomicInteger foulCount = new AtomicInteger(0);
public void addFoul() {
    foulCount.incrementAndGet();
}
public boolean isDangerous() {
    return foulCount.get() >= DANGER_THRESHOLD;
}

如果你需要具体某类比赛(篮球/足球/排球)的规则版本,或者需要图形界面/Web版本,可以告诉我,我再进一步扩展。

上一篇这个java案例怎么看这次肉搏式防守?

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!