scala的名次排名

ops/2024/12/1 8:37:16/

1.准备一个空的List

2.读取文件—按行读取

3.添加学生到List

   对有序的列表,从前开始向后一一比较

    (1).如果当前的分数不等于预设分数,则名次+1,更新预设分数

    (2).如果当前的分数等于预设分数,则名次不变

4.排名

实例操作代码如下:

import java.io.PrintWriter
import scala.collection.mutable.ListBuffer
import scala.io.Source
case class Student(name:String,yuwen:Int,shuxue:Int,yingyu:Int,java:Int,zongfen: Int,pinjunfen:Int,var mingci:Int)
object test {def main(args: Array[String]): Unit = {//    0. 准备一个空的Listval list = ListBuffer[Student]()//    1. 读入文件 - 按行读取// drop(1) 让迭代器跳过一个元素,因为第一行是表头,把第一行跳过去val it = Source.fromFile("score.txt").getLines().drop(1)// 跳过一个元素while(it.hasNext){val arr = it.next().split(",")val total = arr(1).toInt + arr(2).toInt + arr(3).toInt + arr(4).toInt// 3. 添加学生到Listlist +=Student(arr(0), arr(1).toInt,arr(2).toInt, arr(3).toInt, arr(4).toInt,total,total / 3, 0)}val orderList = list.sortWith((a, b) => a.zongfen > b.zongfen)//    对有序的列表,从前开始向后一一比较://    (1) 如果当前的分数不等于预设分数,则名次 +1, 更新预设分数//    (2)  如果当前的分数等于预设分数,则名次不变var curScore = -1var mingci = 0;for (elem <- orderList) {if (elem.zongfen != curScore) {mingci += 1elem.mingci = mingcicurScore = elem.zongfen} else {elem.mingci = mingci}}// 4. 排名// 根据总分排名,取前三名val li1 = list.sortWith((a,b)=>a.zongfen > b.zongfen)//li1.foreach(println)// 按语文排名,取前三名val li2 = list.sortWith((a, b) => a.yuwen > b.yuwen).slice(0, 3)li2.foreach(println)// 5. 写入val writer = new PrintWriter("排名之后的结果.txt")// 所有的成绩list.foreach(s => {writer.println(s"姓名:${s.name}, 名次:${s.mingci},语文: ${s.yuwen}, 数学: ${s.shuxue}, 英语: ${s.yingyu},  java: ${s.java}, 总分:${s.zongfen}, 平均分:${s.pinjunfen}")})writer.println("-"*40)li1.foreach(s => {writer.println(s"姓名:${s.name},  总分:${s.zongfen}")})writer.println("-" * 40 + "语文前三名")li2.foreach(s => {writer.println(s"姓名:${s.name},  语文: ${s.yuwen},总分:${s.zongfen}")})writer.close() // 结束输出}
}

总分排名代码如下:

import scala.collection.mutable.ListBuffer
object test_order {def main(args: Array[String]): Unit = {case class Student(name:String,zongfen:Int,var mingci:Int)val list=ListBuffer[Student]()
//    并列list+=Student("孙涛",90,0)list+=Student("林峰",102,0)list+=Student("周梅",101,0)list+=Student("郑洁",105,0)list+=Student("陈晨",90,0)list+=Student("吴刚",102,0)//    对list进行排序,按总分排序val orderList=list.sortWith((a,b)=>a.zongfen>b.zongfen)//    对有序的列表,从前开始向后一一比较:
//    (1)如果当前的分数不等于预设分数,则名次+1,更新预设分数
//    (2)如果当前的分数等于预设分数,则名次不变var curScore = -1var mingci=0;for(elem<-orderList){if(elem.zongfen!=curScore){mingci+=1elem.mingci=mingcicurScore=elem.zongfen}else{elem.mingci=mingci}}list.foreach(println)}
}


http://www.ppmy.cn/ops/138148.html

相关文章

JavaScript 进阶教程:深入理解函数、事件和模块化

在上一节中&#xff0c;我们学习了 JavaScript 的基础语法&#xff0c;并通过一个简单计数器案例感受了它的实际应用。这一节将进一步深入学习 JavaScript 中的重要概念&#xff0c;如函数的高级用法、事件机制以及模块化开发&#xff0c;为更复杂的项目开发打下基础。 一、深入…

android将pcm byte[]通过Librtmp进行rtmp推流

需求 我们这边做的功能是智能戒指&#xff0c;戒指可以录音&#xff0c;然后app通过蓝牙连接&#xff0c;将音频的byte[]进行rtmp推流 技术 因为我们不涉及直播&#xff0c;也不涉及视频&#xff0c;工期也比较短&#xff0c;只是音频推流&#xff0c;所以没用更复杂的ffmpe…

【MySQL-6】MySQL的复合查询

目录 1. 整体学习的思维导图 2. 回顾基本查询 3. 多表查询 4. 自连接 5. 子查询 5.1 单行子查询 5.2 多行子查询 5.3 多列子查询 5.4 在from子句中使用子查询 6. 合并查询 1. 整体学习的思维导图 2. 回顾基本查询 使用scott数据库中的表&#xff0c;完成以下查询&am…

Ansible自动化一键部署单节点集群架构

自动化部署利器&#xff1a;Ansible 一键部署脚本 在现代IT基础设施管理中&#xff0c;Ansible以其简洁、强大的自动化能力脱颖而出。以下是精心打造的Ansible自动化一键部署脚本&#xff0c;旨在简化部署流程&#xff0c;提升效率&#xff0c;确保一致性和可靠性。 通过这个…

模拟器快速上手,助力HarmonyOS应用/服务高效开发

文章目录 1 创建模拟器1&#xff09;打开设备管理界面2&#xff09;设置本地模拟器实例存储路径3&#xff09;创建一个模拟器&#xff08;1&#xff09;选择模拟器设备&#xff08;2&#xff09;创建模拟器&#xff08;3&#xff09;启动模拟器&#xff08;4&#xff09;关闭模…

微服务篇-微服务保护:使用 Sentinel 来实现请求限流、线程隔离、服务熔断和 Fallback 备用方案的使用

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 微服务保护 1.1 请求限流方案 1.2 线程隔离方案 1.3 服务熔断方案 2.0 Sentinel 2.1 Sentinel 安装 2.2 微服务整合 3.0 Sentinel-请求限流 4.0 Sentinel-线程隔离…

射频ADS匹配器阻抗仿真KEYSIGHT FR Basic:Efficient Impedance Matching With ADS

射频ADS匹配器阻抗仿真KEYSIGHT FR Basic&#xff1a;Efficient Impedance Matching With ADS

TCP 的三次握手

TCP 的三次握手 1. TCP 三次握手&#xff08;Three-Way Handshake&#xff09; 目的&#xff1a;三次握手的目的是为了在客户端和服务端之间建立可靠的 TCP 连接&#xff0c;确保双方能够同步&#xff0c;并且为数据传输做好准备。 三次握手的过程&#xff1a; 第一次握手&am…