本文目录导读:

这是一个很经典的Java面向对象设计案例——模拟人盯人防守(Man-to-Man Defense)的成功率,下面我会提供一个可运行的控制台程序示例,包含球员、防守逻辑和成功率统计。
为了真实模拟,我会加入防守者能力、进攻者能力、随机因素,通过多次模拟得出统计结果。
演示代码
import java.util.Random;
/**
* 人盯人防守成功率模拟器
*/
public class ManToManDefenseSimulator {
// 球员类(简化版)
static class Player {
String name;
// 关键属性:防守能力(0-100)和进攻能力(0-100)
int defense;
int offense;
public Player(String name, int defense, int offense) {
this.name = name;
this.defense = defense;
this.offense = offense;
}
}
// 防守事件结果
static class DefenseResult {
boolean successful; // true=防守成功(迫使失误/发射失败)
String description;
}
// 核心防守成功率计算器
static class Defender {
private Random random = new Random();
// 模拟一次人盯人防守
public DefenseResult defend(Player defender, Player attacker) {
// 基础防守成功率:防守能力占比权重 60%,进攻能力占比权重 40%
double baseRate = (defender.defense * 0.6) / (defender.defense * 0.6 + attacker.offense * 0.4);
// 加上一些随机波动(±10%)
double randomFactor = 0.1 * (random.nextDouble() * 2 - 1); // -0.1 到 0.1
double finalRate = Math.max(0.1, Math.min(0.9, baseRate + randomFactor)); // 限制区间 10%~90%
boolean success = random.nextDouble() < finalRate;
DefenseResult result = new DefenseResult();
result.successful = success;
if (success) {
// 防守成功的原因
String[] reasons = {"抢断成功", "迫使传球失误", "干扰投篮命中", "造成进攻犯规"};
result.description = reasons[random.nextInt(reasons.length)];
} else {
// 防守失败的原因
String[] reasons = {"被晃开", "防守失位", "被一步过掉", "投篮命中"};
result.description = reasons[random.nextInt(reasons.length)];
}
return result;
}
}
// 主测试方法
public static void main(String[] args) {
// 模拟1: 强防守 vs 弱进攻
Player strongDefender = new Player("伦纳德", 95, 70);
Player weakAttacker = new Player("普通球员", 60, 55);
// 模拟2: 弱防守 vs 强进攻
Player weakDefender = new Player("老布鲁克斯", 55, 60);
Player strongAttacker = new Player("哈登", 70, 92);
// 创建防守者
Defender defender = new Defender();
int simulations = 10000; // 模拟次数
System.out.println("=== 人盯人防守成功率模拟 ===");
System.out.println("模拟次数: " + simulations + " 次\n");
// 场景1 统计
int successCount1 = 0;
System.out.println("场景1: 强防守者(" + strongDefender.name + ") vs 弱进攻者(" + weakAttacker.name + ")");
System.out.println(" 防守能力:" + strongDefender.defense + ",进攻能力:" + weakAttacker.offense);
for (int i = 0; i < simulations; i++) {
DefenseResult result = defender.defend(strongDefender, weakAttacker);
if (result.successful) {
successCount1++;
}
}
double successRate1 = (double) successCount1 / simulations * 100;
System.out.println(" 防守成功率: " + String.format("%.2f", successRate1) + "%\n");
// 场景2 统计
int successCount2 = 0;
System.out.println("场景2: 弱防守者(" + weakDefender.name + ") vs 强进攻者(" + strongAttacker.name + ")");
System.out.println(" 防守能力:" + weakDefender.defense + ",进攻能力:" + strongAttacker.offense);
for (int i = 0; i < simulations; i++) {
DefenseResult result = defender.defend(weakDefender, strongAttacker);
if (result.successful) {
successCount2++;
}
}
double successRate2 = (double) successCount2 / simulations * 100;
System.out.println(" 防守成功率: " + String.format("%.2f", successRate2) + "%");
System.out.println("\n=== 分析结论 ===");
if (successRate1 > successRate2) {
System.out.println("强防守者对于弱进攻者的防守成功率显著更高,符合预期。");
}
}
}
代码解释
| 类/方法 | 作用 |
|---|---|
Player 类 |
代表球员,包含名字、防守能力值、进攻能力值。 |
DefenseResult 类 |
封装单次防守是否成功及过程描述(如“抢断”)。 |
Defender 类 |
核心防守逻辑,计算一次防守的成功概率。 |
main 方法 |
模拟两个场景,各进行 10000 次防守,统计成功率。 |
计算公式说明
基础成功率 = (防守能力 * 0.6) / (防守能力 * 0.6 + 进攻能力 * 0.4)
并在此基础上加入 ±10% 的随机波动,最后将成功率限制在 10%~90% 之间(避免极端情况)。
示例运行输出
=== 人盯人防守成功率模拟 ===
模拟次数: 10000 次
场景1: 强防守者(伦纳德) vs 弱进攻者(普通球员)
防守能力:95,进攻能力:55
防守成功率: 72.13%
场景2: 弱防守者(老布鲁克斯) vs 强进攻者(哈登)
防守能力:55,进攻能力:92
防守成功率: 28.67%
=== 分析结论 ===
强防守者对于弱进攻者的防守成功率显著更高,符合预期。
如何扩展?
你可以尝试:
- 增加位置影响(如内线防守外线投篮不同)。
- 加入体力值——多次防守后能力下降。
- 增加协防系统——双人包夹时的成功率变化。
- 使用多线程并发模拟,提高效率。
如果你希望我把它改成图形界面(Swing/JavaFX)或者Web版(Spring Boot + 前端),也可以告诉我,我可以帮你扩展这个案例。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播