java案例统计任意球直接得分几次?

wen java案例 12

本文目录导读:

java案例统计任意球直接得分几次?

  1. 方案一:简单的数据统计(使用List)
  2. 方案二:使用HashMap统计每个球员的得分
  3. 方案三:使用面向对象编程
  4. 使用方法:
  5. 示例输出(方案三):

我来帮你创建一个统计任意球直接得分的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());
    }
}

使用方法:

  1. 方案一和方案二:运行时通过控制台输入数据
  2. 方案三:直接在代码中修改模拟数据

示例输出(方案三):

=== 球队任意球统计报告 ===
梅西:
  总任意球:3
  直接得分:2
  得分率:66.7%
C罗:
  总任意球:2
  直接得分:1
  得分率:50.0%
贝克汉姆:
  总任意球:1
  直接得分:1
  得分率:100.0%
内马尔:
  总任意球:1
  直接得分:0
  得分率:0.0%
球队总任意球:7
球队直接得分:4
总的任意球直接得分次数:4

你可以根据实际需求选择合适的方案,如果需要处理比赛数据文件,可以进一步扩展这些程序来读取文件。

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