本文目录导读:

概念定义(先对齐口径)
进攻三区(Attacking Third / Final Third):足球场按纵向划分为三个区域,进攻三区通常指靠近对方球门的1/3区域。
进攻三区传球成功率 = 进攻三区内成功传球次数 ÷ 进攻三区内传球总次数 × 100%
判定要点(不同案例可能不同,需确认):
- 传球起点是否必须在进攻三区?还是终点在?还是起点在进攻三区(常见口径)
- 何为“成功传球”:队友接到球且未丢失球权
- 是否排除传中、长传、被犯规中断等特殊情况
Java实现示例
数据模型
import java.util.*;
// 传球事件
class PassEvent {
String passId;
String fromPlayer;
String toPlayer;
double startX; // 0~100,纵向坐标(0=本方球门,100=对方球门)
double startY; // 0~100,横向坐标
double endX;
double endY;
boolean success; // 是否成功传到队友脚下
public PassEvent(String passId, String fromPlayer, String toPlayer,
double startX, double startY, double endX, double endY,
boolean success) {
this.passId = passId;
this.fromPlayer = fromPlayer;
this.toPlayer = toPlayer;
this.startX = startX;
this.startY = startY;
this.endX = endX;
this.endY = endY;
this.success = success;
}
}
核心计算逻辑
public class AttackingThirdPassAnalyzer {
// 进攻三区阈值:纵向坐标 >= 66.7 视为进入进攻三区(按起点判定)
private static final double FINAL_THIRD_THRESHOLD = 66.7;
/**
* 判断传球是否发生在进攻三区(以传球起点为准)
*/
private static boolean isInFinalThird(PassEvent p) {
return p.startX >= FINAL_THIRD_THRESHOLD;
}
/**
* 计算进攻三区传球成功率
* @return 成功率百分比,若无传球数据返回 -1
*/
public static double calcFinalThirdPassSuccessRate(List<PassEvent> passes) {
int total = 0;
int success = 0;
for (PassEvent p : passes) {
if (isInFinalThird(p)) {
total++;
if (p.success) {
success++;
}
}
}
if (total == 0) {
return -1; // 无数据
}
return (double) success / total * 100.0;
}
/**
* 输出详细统计(可选)
*/
public static void printReport(List<PassEvent> passes) {
int total = 0, success = 0, fail = 0;
for (PassEvent p : passes) {
if (isInFinalThird(p)) {
total++;
if (p.success) success++;
else fail++;
}
}
double rate = total == 0 ? 0 : (double) success / total * 100;
System.out.printf("进攻三区传球总数: %d%n", total);
System.out.printf("成功传球: %d%n", success);
System.out.printf("失败传球: %d%n", fail);
System.out.printf("进攻三区传球成功率: %.2f%%%n", rate);
}
}
测试用例
public class Main {
public static void main(String[] args) {
List<PassEvent> passes = new ArrayList<>();
// 进攻三区内:成功
passes.add(new PassEvent("P1", "A", "B", 70, 30, 75, 40, true));
// 进攻三区内:成功
passes.add(new PassEvent("P2", "B", "C", 80, 40, 85, 45, true));
// 进攻三区内:失败
passes.add(new PassEvent("P3", "C", "D", 68, 50, 60, 55, false));
// 中场区域:不计入
passes.add(new PassEvent("P4", "D", "E", 50, 50, 55, 60, true));
// 进攻三区内:失败
passes.add(new PassEvent("P5", "E", "F", 75, 20, 90, 25, false));
AttackingThirdPassAnalyzer.printReport(passes);
double rate = AttackingThirdPassAnalyzer.calcFinalThirdPassSuccessRate(passes);
System.out.printf("返回值: %.2f%%%n", rate);
}
}
运行结果
进攻三区传球总数: 4
成功传球: 2
失败传球: 2
进攻三区传球成功率: 50.00%
返回值: 50.00%
需要您确认的关键点
如果您的Java案例对以下口径有特殊定义,请告诉我,我帮您改代码:
| 项目 | 常见可选口径 |
|---|---|
| 区域判定 | 起点在进攻三区 / 终点在进攻三区 / 起点终点均在 |
| 坐标系 | x=0在本方禁区(案例里常见)还是 x=0在中线 |
| 阈值 | 7(1/3)还是 70 或其他 |
| 成功定义 | 是否排除传中、是否排除被抢断但队友补救等 |
| 数据来源 | CSV/JSON/数据库/硬编码对象 |
您把案例里的原始需求描述或数据结构发给我,我可以直接改成与您案例完全一致的版本(含CSV读取、Stream API写法、单元测试等)。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播