本文目录导读:

我来帮你创建一个统计任意球直接得分的Java程序,这里给出两个方案:
简单的数据统计(使用List)
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class 任意球统计 {
// 定义一个任意球事件的类
static class FreeKick {
String playerName; // 球员姓名
boolean isGoal; // 是否直接得分
int minute; // 比赛时间
public FreeKick(String playerName, boolean isGoal, int minute) {
this.playerName = playerName;
this.isGoal = isGoal;
this.minute = minute;
}
}
public static void main(String[] args) {
List<FreeKick> freeKicks = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
System.out.println("=== 任意球数据统计系统 ===");
System.out.println("请逐个输入任意球数据(输入'退出'结束)");
while (true) {
System.out.print("输入球员姓名(或输入'退出'):");
String name = scanner.nextLine();
if (name.equals("退出")) break;
System.out.print("是否直接得分(是/否):");
String isGoalStr = scanner.nextLine();
boolean isGoal = isGoalStr.equals("是");
System.out.print("比赛时间(分钟):");
int minute = Integer.parseInt(scanner.nextLine());
freeKicks.add(new FreeKick(name, isGoal, minute));
System.out.println("已记录!\n");
}
// 统计直接得分次数
int directGoalCount = 0;
List<FreeKick> directGoals = new ArrayList<>();
for (FreeKick fk : freeKicks) {
if (fk.isGoal) {
directGoalCount++;
directGoals.add(fk);
}
}
// 输出结果
System.out.println("\n=== 统计结果 ===");
System.out.println("总任意球次数:" + freeKicks.size());
System.out.println("直接得分次数:" + directGoalCount);
System.out.println("直接得分率:" + (freeKicks.size() > 0 ?
String.format("%.2f%%", (double)directGoalCount/freeKicks.size()*100) : "0%"));
if (directGoals.size() > 0) {
System.out.println("\n直接得分详情:");
for (FreeKick fk : directGoals) {
System.out.println("球员:" + fk.playerName +
",时间:" + fk.minute + "分钟");
}
}
scanner.close();
}
}
使用HashMap统计每个球员的得分
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class 任意球球员统计 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 存储每个球员的任意球统计数据
Map<String, int[]> playerStats = new HashMap<>();
// int[] 数组:[0]总任意球次数, [1]直接得分次数
System.out.println("=== 球员任意球统计分析 ===");
System.out.println("输入格式:球员名 是否得分(true/false)");
System.out.println("输入'end'结束");
while (true) {
System.out.print("请输入数据:");
String input = scanner.nextLine();
if (input.equals("end")) break;
String[] parts = input.split(" ");
if (parts.length != 2) {
System.out.println("格式错误,请重新输入!");
continue;
}
String playerName = parts[0];
boolean isGoal = Boolean.parseBoolean(parts[1]);
// 更新统计数据
int[] stats = playerStats.computeIfAbsent(playerName, k -> new int[2]);
stats[0]++; // 总次数+1
if (isGoal) stats[1]++; // 得分次数+1
}
// 输出统计结果
System.out.println("\n=== 球员任意球统计 ===");
int totalFreeKicks = 0;
int totalGoals = 0;
for (Map.Entry<String, int[]> entry : playerStats.entrySet()) {
String player = entry.getKey();
int[] stats = entry.getValue();
totalFreeKicks += stats[0];
totalGoals += stats[1];
System.out.println("球员:" + player);
System.out.println(" 总任意球:" + stats[0] + "次");
System.out.println(" 直接得分:" + stats[1] + "次");
System.out.println(" 得分率:" + (stats[0] > 0 ?
String.format("%.1f%%", (double)stats[1]/stats[0]*100) : "0%"));
}
System.out.println("\n=== 总体统计 ===");
System.out.println("总任意球次数:" + totalFreeKicks);
System.out.println("总直接得分:" + totalGoals);
scanner.close();
}
}
使用面向对象编程
import java.util.ArrayList;
import java.util.List;
public class 任意球统计系统 {
// 球员类
static class Player {
private String name;
private int totalFreeKicks;
private int directGoals;
public Player(String name) {
this.name = name;
this.totalFreeKicks = 0;
this.directGoals = 0;
}
public void addFreeKick(boolean isGoal) {
totalFreeKicks++;
if (isGoal) directGoals++;
}
public double getScoreRate() {
return totalFreeKicks > 0 ? (double)directGoals/totalFreeKicks : 0;
}
public String getName() { return name; }
public int getTotalFreeKicks() { return totalFreeKicks; }
public int getDirectGoals() { return directGoals; }
}
// 比赛类
static class Match {
private List<Player> players = new ArrayList<>();
// 记录一次任意球
public void recordFreeKick(String playerName, boolean isGoal) {
// 查找球员,如果没有则创建
Player player = findPlayer(playerName);
if (player == null) {
player = new Player(playerName);
players.add(player);
}
player.addFreeKick(isGoal);
}
private Player findPlayer(String name) {
for (Player p : players) {
if (p.getName().equals(name)) {
return p;
}
}
return null;
}
// 统计总的直接得分
public int getTotalDirectGoals() {
int total = 0;
for (Player p : players) {
total += p.getDirectGoals();
}
return total;
}
// 展示统计信息
public void displayStats() {
System.out.println("\n=== 球队任意球统计报告 ===");
int totalKicks = 0;
for (Player p : players) {
System.out.println(p.getName() + ":");
System.out.println(" 总任意球:" + p.getTotalFreeKicks());
System.out.println(" 直接得分:" + p.getDirectGoals());
System.out.println(String.format(" 得分率:%.1f%%", p.getScoreRate()*100));
totalKicks += p.getTotalFreeKicks();
}
System.out.println("球队总任意球:" + totalKicks);
System.out.println("球队直接得分:" + getTotalDirectGoals());
}
}
public static void main(String[] args) {
Match match = new Match();
// 模拟数据
match.recordFreeKick("梅西", true);
match.recordFreeKick("C罗", true);
match.recordFreeKick("梅西", false);
match.recordFreeKick("贝克汉姆", true);
match.recordFreeKick("C罗", false);
match.recordFreeKick("梅西", true);
match.recordFreeKick("内马尔", false);
match.displayStats();
System.out.println("\n总的任意球直接得分次数:" + match.getTotalDirectGoals());
}
}
使用方法:
- 方案一和方案二:运行时通过控制台输入数据
- 方案三:直接在代码中修改模拟数据
示例输出(方案三):
=== 球队任意球统计报告 ===
梅西:
总任意球:3
直接得分:2
得分率:66.7%
C罗:
总任意球:2
直接得分:1
得分率:50.0%
贝克汉姆:
总任意球:1
直接得分:1
得分率:100.0%
内马尔:
总任意球:1
直接得分:0
得分率:0.0%
球队总任意球:7
球队直接得分:4
总的任意球直接得分次数:4
你可以根据实际需求选择合适的方案,如果需要处理比赛数据文件,可以进一步扩展这些程序来读取文件。