在Java中如何编写成绩排名统计程序_Java排序算法项目解析
发布时间 - 2026-01-26 00:00:00 点击率:次用ArrayList存成绩最稳妥,Student类应含name和score并实现Comparable或用Comparator;排序用Collections.sort()或Arrays.sort()(底层Timsort);double比较用Double.compare();同分需遍历设并列名次。
成绩数据怎么存才方便后续排序
直接用 ArrayList 最稳妥,别图省事用两个平行数组(比如一个存姓名、一个存分数),后期排序时极易错位。每个 Student 对象至少包含 name 和 score 字段,建议实现 Comparable 接口,或准备一个外部 —— 后者更灵活,比如以后要按姓名升序、分数降序混合排名时不用改类定义。
用 Collections.sort() 还是 Arrays.sort()
取决于你用的是集合还是数组:
- 用
ArrayList或LinkedList→ 用Collections.sort(list, comparator) - 用
Student[]数组 → 用Arrays.sort(array, comparator)
两者底层都调用 Timsort,稳定且高效;别手写冒泡或选择排序——成绩数据哪怕只有几百条,手写低效排序在真实项目里会被直接拒收。注意:如果 score 是 double 类型,比较时别用 == 判相等,要用 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开发实例及注意事项

