java案例统计转身过人次数谁多?

wen java案例 4

篮球转身过人次数统计 - Java案例

下面用Java实现一个简单的转身过人次数统计程序,可以统计多名球员中谁转身过人次数最多。

java案例统计转身过人次数谁多?

场景说明

统计一场篮球比赛中,几名球员的转身过人(spin move)次数,找出次数最多的球员。

基础版(数组 + 手动统计)

import java.util.Scanner;
public class SpinMoveCounter {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入球员人数:");
        int n = sc.nextInt();
        String[] names = new String[n];
        int[] counts = new int[n];
        // 输入每个球员的姓名和转身次数
        for (int i = 0; i < n; i++) {
            System.out.print("请输入第" + (i + 1) + "位球员姓名:");
            names[i] = sc.next();
            System.out.print("请输入该球员转身过人次数:");
            counts[i] = sc.nextInt();
        }
        // 找出最大值
        int max = counts[0];
        int maxIndex = 0;
        for (int i = 1; i < n; i++) {
            if (counts[i] > max) {
                max = counts[i];
                maxIndex = i;
            }
        }
        // 输出结果
        System.out.println("\n=== 转身过人统计结果 ===");
        for (int i = 0; i < n; i++) {
            System.out.println(names[i] + ":" + counts[i] + " 次");
        }
        // 考虑并列第一
        System.out.print("\n转身过人次数最多的是:");
        boolean first = true;
        for (int i = 0; i < n; i++) {
            if (counts[i] == max) {
                if (!first) System.out.print("、");
                System.out.print(names[i] + "(" + max + "次)");
                first = false;
            }
        }
        System.out.println();
        sc.close();
    }
}

运行示例

请输入球员人数:4
请输入第1位球员姓名:欧文
请输入该球员转身过人次数:8
请输入第2位球员姓名:哈登
请输入该球员转身过人次数:5
请输入第3位球员姓名:东契奇
请输入该球员转身过人次数:8
请输入第4位球员姓名:库里
请输入该球员转身过人次数:3
=== 转身过人统计结果 ===
欧文:8 次
哈登:5 次
东契奇:8 次
库里:3 次
转身过人次数最多的是:欧文(8次)、东契奇(8次)

面向对象版(推荐)

球员类

public class Player {
    private String name;
    private int spinCount;  // 转身过人次数
    public Player(String name, int spinCount) {
        this.name = name;
        this.spinCount = spinCount;
    }
    public String getName() { return name; }
    public int getSpinCount() { return spinCount; }
    @Override
    public String toString() {
        return name + ":" + spinCount + " 次";
    }
}

统计工具类

import java.util.*;
import java.util.stream.Collectors;
public class SpinMoveAnalyzer {
    /** 统计转身过人次数最多的球员(支持并列) */
    public static List<Player> findTopPlayers(List<Player> players) {
        // 找出最大次数
        int max = players.stream()
                .mapToInt(Player::getSpinCount)
                .max()
                .orElse(0);
        // 过滤出所有达到最大次数的球员
        return players.stream()
                .filter(p -> p.getSpinCount() == max)
                .collect(Collectors.toList());
    }
    /** 按次数从高到低排序输出 */
    public static void printRanking(List<Player> players) {
        System.out.println("=== 转身过人排行榜 ===");
        players.stream()
                .sorted(Comparator.comparingInt(Player::getSpinCount).reversed())
                .forEach(p -> System.out.println(p));
    }
}

测试主类

import java.util.*;
public class Main {
    public static void main(String[] args) {
        List<Player> players = new ArrayList<>();
        players.add(new Player("欧文", 8));
        players.add(new Player("哈登", 5));
        players.add(new Player("东契奇", 8));
        players.add(new Player("库里", 3));
        players.add(new Player("保罗", 6));
        // 打印排行榜
        SpinMoveAnalyzer.printRanking(players);
        // 找最多的人
        List<Player> tops = SpinMoveAnalyzer.findTopPlayers(players);
        System.out.print("\n转身过人最多的是:");
        tops.forEach(p -> System.out.print(p.getName() + "(" + p.getSpinCount() + "次) "));
        System.out.println();
    }
}

输出结果

=== 转身过人排行榜 ===
欧文:8 次
东契奇:8 次
保罗:6 次
哈登:5 次
库里:3 次
转身过人最多的是:欧文(8次) 东契奇(8次) 

统计某球员累计次数(进阶)

如果需要统计某球员整场比赛每次转身过人的记录,例如从一系列动作中统计:

import java.util.*;
import java.util.stream.Collectors;
public class ActionStats {
    public static void main(String[] args) {
        // 模拟一场比赛中所有球员的动作记录
        String[] actions = {
            "欧文:转身", "欧文:三分", "东契奇:转身", "欧文:转身",
            "哈登:转身", "东契奇:转身", "欧文:上篮", "哈登:转身",
            "东契奇:转身", "欧文:转身"
        };
        // 统计每个球员转身次数
        Map<String, Long> spinMap = Arrays.stream(actions)
                .filter(a -> a.endsWith(":转身"))
                .map(a -> a.split(":")[0])
                .collect(Collectors.groupingBy(name -> name, Collectors.counting()));
        // 输出统计
        spinMap.forEach((name, cnt) ->
                System.out.println(name + " 转身过人次数:" + cnt));
        // 找最多的人
        String king = spinMap.entrySet().stream()
                .max(Map.Entry.comparingByValue())
                .map(Map.Entry::getKey)
                .orElse("无");
        System.out.println("\n转身过人王是:" + king
                + "(" + spinMap.get(king) + "次)");
    }
}

输出

欧文 转身过人次数:4
东契奇 转身过人次数:3
哈登 转身过人次数:2
转身过人王是:欧文(4次)

技术点 说明
int[] 数组 基础版存储次数,手动比较
最大值查找 遍历比较,可处理并列情况
Player 面向对象封装
Stream API filter/map/max/sorted/collect
Collectors.groupingBy 按球员分组计数
Comparator 排序比较器

扩展方向

  1. 从文件/数据库读取数据:改为读取 CSV 或 JDBC 查询。
  2. 图形化界面:Swing / JavaFX 显示统计图。
  3. 多维度统计:转身次数 + 成功率 + 得分效率。
  4. 并列第一处理:如方案一/二所示,用 List 收集所有最大值球员。

如果你需要针对某个具体场景(比如从文件读取、接入数据库、GUI展示)的代码,告诉我,我可以进一步扩展。

上一篇这个java案例显示角球直接破门有过吗?

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

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