java案例统计球员评分最高者是谁?

wen java案例 1

本文目录导读:

java案例统计球员评分最高者是谁?

  1. 完整代码示例
  2. 改进版本(面向对象更完善)
  3. 运行示例
  4. 代码说明

这是一个Java案例,用于统计球员评分最高者是谁,我会提供一个完整的示例,包括球员类定义、数据录入和最高评分统计。

完整代码示例

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// 球员类
class Player {
    private String name;
    private double score;
    private String position;
    public Player(String name, double score, String position) {
        this.name = name;
        this.score = score;
        this.position = position;
    }
    public String getName() {
        return name;
    }
    public double getScore() {
        return score;
    }
    public String getPosition() {
        return position;
    }
    @Override
    public String toString() {
        return "球员姓名: " + name + ", 评分: " + score + ", 位置: " + position;
    }
}
// 主类
public class PlayerScoreStatistics {
    public static void main(String[] args) {
        // 方式一:静态数据测试
        System.out.println("=== 方式一:静态数据测试 ===");
        testWithStaticData();
        // 方式二:用户输入数据
        System.out.println("\n=== 方式二:用户输入数据 ===");
        testWithUserInput();
    }
    // 静态数据测试方法
    public static void testWithStaticData() {
        // 创建一个球员列表
        List<Player> players = new ArrayList<>();
        players.add(new Player("詹姆斯", 9.8, "前锋"));
        players.add(new Player("库里", 9.5, "后卫"));
        players.add(new Player("杜兰特", 9.7, "前锋"));
        players.add(new Player("保罗", 9.1, "后卫"));
        players.add(new Player("戴维斯", 9.3, "中锋"));
        // 找出评分最高的球员
        Player highestScored = findHighestScoredPlayer(players);
        System.out.println("所有球员信息:");
        for (Player p : players) {
            System.out.println(p);
        }
        System.out.println("\n评分最高的球员是: " + highestScored.getName());
        System.out.println("详细资料: " + highestScored);
    }
    // 用户输入测试方法
    public static void testWithUserInput() {
        Scanner scanner = new Scanner(System.in);
        List<Player> players = new ArrayList<>();
        System.out.print("请输入球员数量: ");
        int count = scanner.nextInt();
        scanner.nextLine(); // 消耗换行符
        // 输入球员信息
        for (int i = 0; i < count; i++) {
            System.out.println("\n请输入第 " + (i + 1) + " 位球员信息:");
            System.out.print("姓名: ");
            String name = scanner.nextLine();
            System.out.print("评分 (0-10): ");
            double score = scanner.nextDouble();
            scanner.nextLine(); // 消耗换行符
            System.out.print("位置 (前锋/后卫/中锋): ");
            String position = scanner.nextLine();
            players.add(new Player(name, score, position));
        }
        // 找出最高分球员
        Player highestScored = findHighestScoredPlayer(players);
        System.out.println("\n========== 统计结果 ==========");
        System.out.println("所有球员信息:");
        // 使用索引遍历
        for (int i = 0; i < players.size(); i++) {
            System.out.println((i + 1) + ". " + players.get(i));
        }
        System.out.println("\n评分最高的球员是: " + highestScored.getName());
        System.out.println("详细资料: " + highestScored);
        scanner.close();
    }
    // 找出评分最高的球员方法
    public static Player findHighestScoredPlayer(List<Player> players) {
        if (players == null || players.isEmpty()) {
            return null;
        }
        Player highest = players.get(0);
        for (Player player : players) {
            if (player.getScore() > highest.getScore()) {
                highest = player;
            }
        }
        return highest;
    }
    // 扩展方法:找出所有最高分的球员(可能出现并列)
    public static List<Player> findAllHighestScoredPlayers(List<Player> players) {
        List<Player> highestPlayers = new ArrayList<>();
        if (players == null || players.isEmpty()) {
            return highestPlayers;
        }
        double maxScore = findHighestScoredPlayer(players).getScore();
        for (Player player : players) {
            if (player.getScore() == maxScore) {
                highestPlayers.add(player);
            }
        }
        return highestPlayers;
    }
}

改进版本(面向对象更完善)

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
// 球员管理类
class PlayerManager {
    private List<Player> players;
    public PlayerManager() {
        this.players = new ArrayList<>();
    }
    // 添加球员
    public void addPlayer(Player player) {
        players.add(player);
    }
    // 批量添加球员
    public void addPlayers(List<Player> newPlayers) {
        players.addAll(newPlayers);
    }
    // 移除球员
    public boolean removePlayer(String name) {
        return players.removeIf(p -> p.getName().equals(name));
    }
    // 获取评分最高的球员
    public Player getHighestScoredPlayer() {
        if (players.isEmpty()) {
            return null;
        }
        return players.stream()
                .max(Comparator.comparingDouble(Player::getScore))
                .orElse(null);
    }
    // 获取所有评分最高的球员(处理并列情况)
    public List<Player> getAllHighestScoredPlayers() {
        Player highest = getHighestScoredPlayer();
        if (highest == null) {
            return new ArrayList<>();
        }
        List<Player> result = new ArrayList<>();
        for (Player p : players) {
            if (p.getScore() == highest.getScore()) {
                result.add(p);
            }
        }
        return result;
    }
    // 按评分排序
    public void sortByScore() {
        players.sort(Comparator.comparingDouble(Player::getScore).reversed());
    }
    // 获取球员列表
    public List<Player> getPlayers() {
        return new ArrayList<>(players);
    }
    // 显示所有球员
    public void displayAllPlayers() {
        int index = 1;
        for (Player p : players) {
            System.out.println(index++ + ". " + p);
        }
    }
}
public class PlayerScoreDemo2 {
    public static void main(String[] args) {
        PlayerManager manager = new PlayerManager();
        // 添加球员数据
        manager.addPlayer(new Player("球员A", 8.9, "前锋"));
        manager.addPlayer(new Player("球员B", 9.5, "后卫"));
        manager.addPlayer(new Player("球员C", 9.5, "中锋")); // 与B并列最高
        manager.addPlayer(new Player("球员D", 8.7, "后卫"));
        System.out.println("所有球员:");
        manager.displayAllPlayers();
        System.out.println("\n评分最高的球员:");
        Player highest = manager.getHighestScoredPlayer();
        System.out.println(highest);
        System.out.println("\n所有最高评分的球员:");
        List<Player> topPlayers = manager.getAllHighestScoredPlayers();
        for (Player p : topPlayers) {
            System.out.println(p);
        }
        System.out.println("\n按评分从高到低排序:");
        manager.sortByScore();
        manager.displayAllPlayers();
    }
}

运行示例

=== 方式一:静态数据测试 ===
所有球员信息:
球员姓名: 詹姆斯, 评分: 9.8, 位置: 前锋
球员姓名: 库里, 评分: 9.5, 位置: 后卫
球员姓名: 杜兰特, 评分: 9.7, 位置: 前锋
球员姓名: 保罗, 评分: 9.1, 位置: 后卫
球员姓名: 戴维斯, 评分: 9.3, 位置: 中锋
评分最高的球员是: 詹姆斯
详细资料: 球员姓名: 詹姆斯, 评分: 9.8, 位置: 前锋
=== 方式二:用户输入数据 ===
请输入球员数量: 3
请输入第 1 位球员信息:
姓名: 张三
评分 (0-10): 8.5
位置 (前锋/后卫/中锋): 前锋
请输入第 2 位球员信息:
姓名: 李四
评分 (0-10): 9.2
位置 (前锋/后卫/中锋): 后卫
请输入第 3 位球员信息:
姓名: 王五
评分 (0-10): 9.0
位置 (前锋/后卫/中锋): 中锋
========== 统计结果 ==========
所有球员信息:
1. 球员姓名: 张三, 评分: 8.5, 位置: 前锋
2. 球员姓名: 李四, 评分: 9.2, 位置: 后卫
3. 球员姓名: 王五, 评分: 9.0, 位置: 中锋
评分最高的球员是: 李四
详细资料: 球员姓名: 李四, 评分: 9.2, 位置: 后卫

代码说明

主要功能:

  1. 数据录入:支持静态数据和用户输入两种方式
  2. 统计功能:找出评分最高的球员
  3. 扩展功能:处理并列最高分的情况、按评分排序等

核心方法:

  • findHighestScoredPlayer():遍历找出最高分球员
  • findAllHighestScoredPlayers():找出所有并列最高分的球员
  • sortByScore():按评分排序

面向对象设计:

  • Player类:封装球员信息(姓名、评分、位置)
  • PlayerManager类:管理球员数据和统计操作
  • 使用Java集合框架(List、ArrayList)存储数据

这个案例展示了Java面向对象编程的基本概念,包括封装、集合操作和算法实现。

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