You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为排行榜玩家类实现Getters和Setters并验证排序逻辑?

嘿,我来帮你搞定这个问题!咱们一步步来,先把Getters/Setters的用法搞懂,再实现你的排行榜需求~

实现带Getters/Setters的Person类并构建有序排行榜

首先得明确:Getters和Setters就是类里用来安全访问、修改私有属性的方法——把属性设为私有后,外部不能直接乱改,必须通过这俩方法操作,还能在里面加数据验证逻辑,避免出现非法值(比如负分数)。

第一步:编写Person类(带Getters和Setters)

给你写一个实用的Person类模板,包含玩家名称、分数,还有对应的getter/setter,顺便加了参数验证:

public class Person {
    // 私有属性,外部不能直接操作
    private String name;
    private int score;

    // 构造方法,创建实例时直接初始化名称和分数
    public Person(String name, int score) {
        this.name = name;
        // 用setter设置分数,顺便触发验证逻辑
        this.setScore(score);
    }

    // 名称的getter:获取玩家名称
    public String getName() {
        return this.name;
    }

    // 名称的setter:修改玩家名称(加了非空验证)
    public void setName(String name) {
        if (name != null && !name.trim().isEmpty()) {
            this.name = name;
        } else {
            throw new IllegalArgumentException("玩家名称不能为空哦!");
        }
    }

    // 分数的getter:获取玩家分数
    public int getScore() {
        return this.score;
    }

    // 分数的setter:修改玩家分数(加了非负验证)
    public void setScore(int score) {
        if (score >= 0) {
            this.score = score;
        } else {
            throw new IllegalArgumentException("分数不能是负数呀!");
        }
    }

    // 可选:重写toString,方便直接打印玩家信息
    @Override
    public String toString() {
        return "玩家:" + name + " | 分数:" + score;
    }
}

第二步:循环创建实例并验证排行榜顺序

假设你已经能从排行榜里读取每行的玩家名称和分数,咱们可以把实例存入列表,同时实时验证每一行的分数是否符合“降序”要求:

import java.util.ArrayList;
import java.util.List;

public class LeaderboardHandler {
    public static void main(String[] args) {
        // 模拟从排行榜读取的每行数据(你可以替换成实际的读取逻辑,比如读文件/数据库)
        String[][] leaderboardRows = {
            {"张三", "980"},
            {"李四", "920"},
            {"王五", "880"},
            {"赵六", "850"}
        };

        List<Person> playerList = new ArrayList<>();
        int lastScore = Integer.MAX_VALUE; // 初始设为最大值,确保第一个玩家能通过验证

        for (String[] row : leaderboardRows) {
            String playerName = row[0];
            int playerScore = Integer.parseInt(row[1]);

            // 创建Person实例
            Person currentPlayer = new Person(playerName, playerScore);
            playerList.add(currentPlayer);

            // 验证当前分数是否小于等于前一行分数(确保降序排列)
            if (currentPlayer.getScore() > lastScore) {
                System.out.println("⚠️ 警告:玩家" + playerName + "的分数(" + playerScore + ")高于前一位玩家,排行榜顺序异常!");
            }

            // 更新上一行分数为当前分数
            lastScore = currentPlayer.getScore();
        }

        // 打印最终整理好的排行榜
        System.out.println("\n当前排行榜:");
        for (Person player : playerList) {
            System.out.println(player);
        }
    }
}

额外小技巧

如果你的原始排行榜数据是无序的,还可以用排序工具直接对Person列表按分数降序排列,不用手动验证:

import java.util.Collections;
import java.util.Comparator;

// 按分数从高到低排序
Collections.sort(playerList, new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        // 降序逻辑:用后一个的分数减前一个的分数
        return Integer.compare(p2.getScore(), p1.getScore());
    }
});

这样不管原始数据顺序咋样,都能得到整齐的降序排行榜~

内容的提问来源于stack exchange,提问作者user9686029

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:43:45