Java实现从scores.txt读取并打印前5名最优游戏成绩
解决读取并输出前5最优成绩的方案
嘿,这个需求其实很好实现!咱们的目标是从scores.txt里读出所有剩余牌数,找出最小的5个(毕竟剩的越少成绩越好嘛),然后打印出来。我给你写一段可以直接整合到你DeckOfCards类里的代码,附带详细注释,你一看就懂:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Arrays; public class DeckOfCards { // 你已有的DeckOfCards类代码... /** * 读取scores.txt并打印前5名最优成绩(剩余牌数最少的5个) */ public static void printTop5Scores() { String scoreFilePath = "scores.txt"; // 使用try-with-resources自动关闭文件流,避免资源泄漏 try (BufferedReader reader = new BufferedReader(new FileReader(scoreFilePath))) { // 读取文件中的成绩行(假设所有成绩以逗号分隔存于一行) String scoreLine = reader.readLine(); // 处理文件为空的情况 if (scoreLine == null || scoreLine.trim().isEmpty()) { System.out.println("目前还没有任何游戏成绩记录哦!"); return; } // 分割字符串为单个成绩的字符串数组,同时去除每个元素的多余空格 String[] scoreStrArray = scoreLine.split(","); int[] scores = new int[scoreStrArray.length]; // 将字符串数组转换为整数数组 for (int i = 0; i < scoreStrArray.length; i++) { scores[i] = Integer.parseInt(scoreStrArray[i].trim()); } // 对成绩数组进行升序排序(最小的成绩会排在最前面) Arrays.sort(scores); // 确定要输出的成绩数量:最多5个,如果总记录不足5个就输出全部 int displayCount = Math.min(5, scores.length); System.out.println("当前最优的5个游戏成绩(剩余牌数越少越好):"); for (int i = 0; i < displayCount; i++) { // 格式化输出,最后一个元素后不加逗号 System.out.print(scores[i] + (i == displayCount - 1 ? "" : ", ")); } System.out.println(); } catch (IOException e) { // 处理文件读取异常 System.err.println("读取成绩文件时发生错误:" + e.getMessage()); } catch (NumberFormatException e) { // 处理文件中存在非数字的无效数据 System.err.println("成绩文件中包含无效数据,请检查格式:" + e.getMessage()); } } // 你已有的其他类方法... }
关键细节说明:
- 资源自动管理:用
try-with-resources包裹文件读取流,不用手动关闭,避免IO资源泄漏。 - 异常处理:覆盖了文件找不到、读取失败,以及文件中有非数字内容的情况,让程序更健壮。
- 边界情况处理:如果
scores.txt里的成绩不足5条,会自动输出所有现有成绩,不会出现数组越界问题。 - 排序逻辑:通过
Arrays.sort()做升序排序,最小的剩余牌数会排在数组最前面,直接取前N个就是最优成绩。
你只需要在游戏结束后或者需要展示成绩的地方调用DeckOfCards.printTop5Scores()就可以啦!
内容的提问来源于stack exchange,提问作者Tyler Durden
相关产品推荐
相关产品推荐

