scala的名次排名

1.准备一个空的List

2.读取文件---按行读取

3.添加学生到List

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

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

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

4.排名

实例操作代码如下:

Scala 复制代码
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. 准备一个空的List
    val 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. 添加学生到List
      list +=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 = -1
    var mingci = 0;
    for (elem <- orderList) {
      if (elem.zongfen != curScore) {
        mingci += 1
        elem.mingci = mingci
        curScore = 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() // 结束输出
  }
}

总分排名代码如下:

Scala 复制代码
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 = -1
    var mingci=0;
    for(elem<-orderList){
      if(elem.zongfen!=curScore){
        mingci+=1
        elem.mingci=mingci
        curScore=elem.zongfen
      }else{
        elem.mingci=mingci
      }
    }
    list.foreach(println)
  }
}
相关推荐
科创致远6 分钟前
科创致远 ESOP 系统深度评测:从参数解析到 ROI 实战验证
大数据·人工智能·制造·精益工程
CAIE研习社10 分钟前
从“会聊天”到能落地:光伏、风电运维里的AI怎么用?
大数据·人工智能
YangYang9YangYan17 分钟前
2026 电商数据运营校招 JD 梳理|岗位任务、技能与面试考点汇总
大数据·数据库·数据分析
事已至此先睡覺吧29 分钟前
第三篇:Java 流程控制详解:条件判断、循环与跳转语句
java·开发语言
m0_7345717638 分钟前
深入理解5g <二十> dmrs
开发语言·5g
NailiConveyor1 小时前
输送线方案设计的工程基础|布局与接口的技术考量|控制系统架构要点
大数据·自动化·制造·业界资讯
IT毕设梦工厂1 小时前
计算机毕业设计选题推荐:基于大数据的城市空气污染物浓度数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·python·信息可视化·数据挖掘·数据分析·课程设计·数据可视化
音符犹如代码1 小时前
Kafka 接入 AI 的三条路线:MCP 提案、会话记忆与实时上下文
java·大数据·ai·kafka
金金计较.1 小时前
Go语言-4
开发语言·golang
hengmeida1 小时前
楼宇控制柜标准化项目交付完整规范
大数据·网络·笔记