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

wen java案例 4

本文目录导读:

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

  1. 版本一:基础版(使用数组)
  2. 版本二:面向对象版(更规范)
  3. 版本三:带成绩等级评判的完整版
  4. 使用说明

我来为您编写一个统计球员评分最高者的Java案例,这里提供两个版本:一个基础版,一个面向对象版。

基础版(使用数组)

import java.util.Scanner;
public class PlayerScoreStats {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入球员数量:");
        int n = scanner.nextInt();
        scanner.nextLine(); // 消耗换行符
        String[] names = new String[n];
        double[] scores = new double[n];
        // 输入球员信息
        for (int i = 0; i < n; i++) {
            System.out.println("\n请输入第" + (i + 1) + "名球员信息:");
            System.out.print("姓名:");
            names[i] = scanner.nextLine();
            System.out.print("评分(0-100):");
            scores[i] = scanner.nextDouble();
            scanner.nextLine(); // 消耗换行符
        }
        // 找出最高分球员
        double maxScore = scores[0];
        String maxPlayer = names[0];
        for (int i = 1; i < n; i++) {
            if (scores[i] > maxScore) {
                maxScore = scores[i];
                maxPlayer = names[i];
            }
        }
        // 输出结果
        System.out.println("\n========== 统计结果 ==========");
        System.out.println("最高评分球员:" + maxPlayer);
        System.out.println("最高评分:" + maxScore);
        // 显示所有球员信息
        System.out.println("\n所有球员评分:");
        for (int i = 0; i < n; i++) {
            System.out.println(names[i] + ":" + scores[i] + " 分");
        }
    }
}

面向对象版(更规范)

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// 球员类
class Player {
    private String name;
    private double score;
    public Player(String name, double score) {
        this.name = name;
        this.score = score;
    }
    public String getName() {
        return name;
    }
    public double getScore() {
        return score;
    }
    @Override
    public String toString() {
        return name + ":" + score + " 分";
    }
}
// 统计类
class PlayerStats {
    private List<Player> players;
    public PlayerStats() {
        players = new ArrayList<>();
    }
    // 添加球员
    public void addPlayer(Player player) {
        players.add(player);
    }
    // 获取最高评分球员
    public Player getHighestScorePlayer() {
        if (players.isEmpty()) {
            return null;
        }
        Player highest = players.get(0);
        for (Player player : players) {
            if (player.getScore() > highest.getScore()) {
                highest = player;
            }
        }
        return highest;
    }
    // 获取所有球员
    public List<Player> getAllPlayers() {
        return players;
    }
    // 获取平均分
    public double getAverageScore() {
        if (players.isEmpty()) return 0;
        double sum = 0;
        for (Player player : players) {
            sum += player.getScore();
        }
        return sum / players.size();
    }
}
// 主程序
public class PlayerScoreAnalyzer {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        PlayerStats stats = new PlayerStats();
        System.out.println("========== 球员评分统计系统 ==========");
        System.out.print("请输入球员数量:");
        int playerCount = scanner.nextInt();
        scanner.nextLine();
        // 输入球员数据
        for (int i = 0; i < playerCount; i++) {
            System.out.println("\n----- 第" + (i + 1) + "名球员 -----");
            System.out.print("姓名:");
            String name = scanner.nextLine();
            System.out.print("评分(0-100):");
            double score = scanner.nextDouble();
            scanner.nextLine();
            stats.addPlayer(new Player(name, score));
        }
        // 输出统计结果
        System.out.println("\n========== 统计结果 ==========");
        Player highest = stats.getHighestScorePlayer();
        if (highest != null) {
            System.out.println("■ 最高评分球员:" + highest.getName());
            System.out.println("  最高评分:" + highest.getScore() + " 分");
        }
        System.out.println("■ 平均评分:" + String.format("%.2f", stats.getAverageScore()) + " 分");
        // 显示所有球员
        System.out.println("\n所有球员评分排名:");
        List<Player> allPlayers = stats.getAllPlayers();
        // 按评分从高到低排序
        allPlayers.sort((p1, p2) -> Double.compare(p2.getScore(), p1.getScore()));
        for (int i = 0; i < allPlayers.size(); i++) {
            Player player = allPlayers.get(i);
            System.out.println((i + 1) + ". " + player.getName() + ":" + player.getScore() + " 分");
            if (i == 0) {
                System.out.println("   ↑ 最高分");
            }
        }
    }
}

带成绩等级评判的完整版

import java.util.*;
class BasketballPlayer {
    private String name;
    private double score;
    private String grade;
    public BasketballPlayer(String name, double score) {
        this.name = name;
        this.score = score;
        this.grade = calculateGrade(score);
    }
    // 根据分数计算等级
    private String calculateGrade(double score) {
        if (score >= 90) return "S";
        else if (score >= 80) return "A";
        else if (score >= 70) return "B";
        else if (score >= 60) return "C";
        else return "D";
    }
    public String getName() { return name; }
    public double getScore() { return score; }
    public String getGrade() { return grade; }
    @Override
    public String toString() {
        return String.format("%-10s 评分:%5.2f  等级:%s", name, score, grade);
    }
}
public class BasketballScoreAnalyzer {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<BasketballPlayer> players = new ArrayList<>();
        System.out.println("========== 篮球球员评分统计系统 ==========");
        // 预设一些球员数据
        System.out.println("是否手动输入球员数据?(y/n)");
        String choice = scanner.next();
        if (choice.equalsIgnoreCase("y")) {
            System.out.print("请输入球员人数:");
            int n = scanner.nextInt();
            scanner.nextLine();
            for (int i = 0; i < n; i++) {
                System.out.println("\n第" + (i+1) + "名球员:");
                System.out.print("姓名:");
                String name = scanner.nextLine();
                System.out.print("评分(0-100):");
                double score = scanner.nextDouble();
                scanner.nextLine();
                players.add(new BasketballPlayer(name, score));
            }
        } else {
            // 使用示例数据
            players.add(new BasketballPlayer("詹姆斯", 95.5));
            players.add(new BasketballPlayer("库里", 92.0));
            players.add(new BasketballPlayer("杜兰特", 89.5));
            players.add(new BasketballPlayer("字母哥", 88.0));
            players.add(new BasketballPlayer("约基奇", 93.5));
        }
        // 找出最高分球员
        BasketballPlayer highest = players.get(0);
        for (BasketballPlayer player : players) {
            if (player.getScore() > highest.getScore()) {
                highest = player;
            }
        }
        // 按评分排序
        players.sort((p1, p2) -> Double.compare(p2.getScore(), p1.getScore()));
        // 输出结果
        System.out.println("\n========== 球员评分排名 ==========");
        for (int i = 0; i < players.size(); i++) {
            System.out.println((i + 1) + ". " + players.get(i));
        }
        System.out.println("\n========== 统计结果 ==========");
        System.out.println("🏆 最高分球员:" + highest.getName());
        System.out.println("  评分:" + highest.getScore() + " 分");
        System.out.println("  等级:" + highest.getGrade());
        // 统计等级分布
        Map<String, Integer> gradeCount = new HashMap<>();
        for (BasketballPlayer player : players) {
            gradeCount.merge(player.getGrade(), 1, Integer::sum);
        }
        System.out.println("\n等级分布:");
        gradeCount.forEach((grade, count) -> 
            System.out.println("  " + grade + "级:" + count + "人"));
        // 计算平均分
        double avg = players.stream()
                .mapToDouble(BasketballPlayer::getScore)
                .average()
                .orElse(0);
        System.out.println("\n平均分:" + String.format("%.2f", avg));
    }
}

使用说明

  1. 版本一:最适合初学者,使用基本数组和循环
  2. 版本二:面向对象设计,包含类、封装和集合
  3. 版本三:功能最完整,包含等级评定、排名和统计

运行示例输出:

========== 球员评分排名 ==========
1. 詹姆斯:95.50 分 等级:S
2. 约基奇:93.50 分 等级:S
3. 库里:92.00 分 等级:S
4. 杜兰特:89.50 分 等级:A
5. 字母哥:88.00 分 等级:A
========== 统计结果 ==========
🏆 最高分球员:詹姆斯
  评分:95.5 分
  等级:S
等级分布:
  S级:3人
  A级:2人
平均分:91.70

您可以根据需要选择适合的版本使用,如果还需要其他功能,比如处理平局情况、支持评分标准修改等,请告诉我!

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