在Java中如何编写成绩排名统计程序_Java排序算法项目解析

发布时间 - 2026-01-26 00:00:00    点击率:
用ArrayList存成绩最稳妥,Student类应含name和score并实现Comparable或用Comparator;排序用Collections.sort()或Arrays.sort()(底层Timsort);double比较用Double.compare();同分需遍历设并列名次。

成绩数据怎么存才方便后续排序

直接用 ArrayList 最稳妥,别图省事用两个平行数组(比如一个存姓名、一个存分数),后期排序时极易错位。每个 Student 对象至少包含 namescore 字段,建议实现 Comparable 接口,或准备一个外部

Comparator —— 后者更灵活,比如以后要按姓名升序、分数降序混合排名时不用改类定义。

Collections.sort() 还是 Arrays.sort()

取决于你用的是集合还是数组:

  • ArrayListLinkedList → 用 Collections.sort(list, comparator)
  • Student[] 数组 → 用 Arrays.sort(array, comparator)

两者底层都调用 Timsort,稳定且高效;别手写冒泡或选择排序——成绩数据哪怕只有几百条,手写低效排序在真实项目里会被直接拒收。注意:如果 scoredouble 类型,比较时别用 == 判相等,要用 Double.compare(a, b),否则 NaN 或精度误差会导致排序错乱。

同分情况怎么处理并列名次

Java 原生排序只管顺序,不管“第几名”。排完序后必须遍历一次打上真实名次。关键逻辑是:当前分数和上一个人一样,名次就不加一。

int rank = 1;
double lastScore = students.get(0).getScore();
students.get(0).setRank(rank);

for (int i = 1; i < students.size(); i++) {
    double currentScore = students.get(i).getScore();
    if (currentScore != lastScore) {
        rank = i + 1; // 注意:不是 rank++
        lastScore = currentScore;
    }
    students.get(i).setRank(rank);
}

这里 rank = i + 1 是核心,不是 rank++。因为索引从 0 开始,第 0 名是第 1 名,第 1 名如果是同分就还是第 1 名,只有分数变化才更新为当前索引+1。

输出带格式的排名表时容易漏掉什么

控制台打印看着整齐,但导出 CSV 或对接前端时,常忽略三件事:

  • 中文字段名没设 UTF-8 编码,导致 Excel 打开乱码(写文件时用 new OutputStreamWriter(file, "UTF-8")
  • 分数保留小数位不统一,比如有人 89.5,有人 90.00 —— 建议统一用 String.format("%.2f", score)
  • 名次列没对齐,尤其当人数超三位数(如第100名),数字宽度突变影响可读性,加个 String.format("%3d", rank) 更稳妥

真正上线的统计程序,往往卡在这些看似琐碎的输出细节上,而不是排序本身。


# excel  # java  # 前端  # 编码  # csv  # stream  # 排序算法 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python文件操作最佳实践_稳定性说明【指导】  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  C#如何调用原生C++ COM对象详解  Swift中swift中的switch 语句  昵图网官网入口 昵图网素材平台官方入口  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  Laravel storage目录权限问题_Laravel文件写入权限设置  如何快速完成中国万网建站详细流程?  使用spring连接及操作mongodb3.0实例  再谈Python中的字符串与字符编码(推荐)  深圳网站制作的公司有哪些,dido官方网站?  千库网官网入口推荐 千库网设计创意平台入口  在线制作视频网站免费,都有哪些好的动漫网站?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  🚀拖拽式CMS建站能否实现高效与个性化并存?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  JavaScript如何实现继承_有哪些常用方法  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  html如何与html链接_实现多个HTML页面互相链接【互相】  Laravel怎么清理缓存_Laravel optimize clear命令详解  如何快速上传自定义模板至建站之星?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  如何将凡科建站内容保存为本地文件?  制作旅游网站html,怎样注册旅游网站?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  如何有效防御Web建站篡改攻击?  如何用VPS主机快速搭建个人网站?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  西安专业网站制作公司有哪些,陕西省建行官方网站?  iOS中将个别页面强制横屏其他页面竖屏  5种Android数据存储方式汇总  在centOS 7安装mysql 5.7的详细教程  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何制作一个表白网站视频,关于勇敢表白的小标题?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  香港服务器租用每月最低只需15元?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  如何在服务器上配置二级域名建站?  在线制作视频的网站有哪些,电脑如何制作视频短片?  bootstrap日历插件datetimepicker使用方法  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  详解jQuery中基本的动画方法  微信小程序 wx.uploadFile无法上传解决办法  如何快速打造个性化非模板自助建站?  详解vue.js组件化开发实践  微信小程序 canvas开发实例及注意事项