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)
  }
}
相关推荐
开开心心就好3 分钟前
AI人声伴奏分离工具,离线提取伴奏K歌用
java·linux·开发语言·网络·人工智能·电脑·blender
子榆.7 分钟前
CANN 性能分析与调优实战:使用 msprof 定位瓶颈,榨干硬件每一分算力
大数据·网络·人工智能
Never_Satisfied7 分钟前
在JavaScript / HTML中,关于querySelectorAll方法
开发语言·javascript·html
新芒18 分钟前
暖通行业两位数下滑,未来靠什么赢?
大数据·人工智能
3GPP仿真实验室31 分钟前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
devmoon34 分钟前
在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
开发语言·安全·区块链·polkadot·erc-20·测试网·独立链
lili-felicity34 分钟前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
沐知全栈开发35 分钟前
CSS3 边框:全面解析与实战技巧
开发语言
忆~遂愿44 分钟前
CANN ATVOSS 算子库深度解析:基于 Ascend C 模板的 Vector 算子子程序化建模与融合优化机制
大数据·人工智能
island13141 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络