如何为排行榜玩家类实现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
相关产品推荐
相关产品推荐

