用Scala来解决成绩排名的相关问题

任务目标:

1.计算每个同学的总分和平均分

2.按总分排名,取前三名

3.按单科排名,取前三名

下图为学生的成绩表

实现代码为:

Scala 复制代码
package test33

import java.io.PrintWriter
import scala.collection.mutable.ListBuffer
import scala.io.Source

case class Student(name:String,yuwen:Int,shuxue:Int,yingyu:Int,zongfen:Int,pinjunfen: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(",")
//      println("姓名:",arr(0))
//      println("语文:",arr(1).toInt)
//      println("数学:",arr(2).toInt)
//      println("英语:",arr(3).toInt)
      val total = arr(1).toInt + arr(2).toInt + arr(3).toInt
//      println("总:",total)
//      println("平均分:",total / 3)
      //3.添加学生到List
      list += Student(arr(0),arr(1).toInt,arr(2).toInt,arr(3).toInt, total,total/3)
    }

    //4.排名

    //根据总分排序,取前三名
    val li1 = list.sortWith((a, b) => a.zongfen > b.zongfen).slice(0,3)
//    li1.foreach(println)

    //按语文排名,取前三名
    val li2 = list.sortWith((a, b) => a.yuwen > b.yuwen).slice(0,3)
        li2.foreach(println)

    //5.写入
    val write = new PrintWriter("排名之后的结果.txt")
    list.foreach(s =>{
      write.println(s"姓名:${s.name},语文:${s.yuwen},数学:${s.shuxue},英语:${s.yingyu},总分:${s.zongfen},平均分:${s.pinjunfen}")
    })
    write.println("-"*40)
    li1.foreach(s => {
      write.println(s"姓名:${s.name},总分:${s.zongfen}")
    })
    write.println("-"*40)
    li2.foreach(s => {
      write.println(s"姓名:${s.name},语文:${s.yuwen}")
    })
    write.close()//结束输出
  }
}
相关推荐
你怎么知道我是队长4 小时前
C语言---枚举变量
c语言·开发语言
李慕婉学姐4 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
吃茄子的猫4 小时前
quecpython中&的具体含义和使用场景
开发语言·python
云栖梦泽4 小时前
易语言中小微企业Windows桌面端IoT监控与控制
开发语言
数据大魔方4 小时前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富
Edward.W6 小时前
Python uv:新一代Python包管理工具,彻底改变开发体验
开发语言·python·uv
小熊officer6 小时前
Python字符串
开发语言·数据库·python
武藤一雄6 小时前
C# 关于多线程如何实现需要注意的问题(持续更新)
windows·后端·microsoft·c#·.net·.netcore·死锁
月疯6 小时前
各种信号的模拟(ECG信号、质谱图、EEG信号),方便U-net训练
开发语言·python
荒诞硬汉6 小时前
JavaBean相关补充
java·开发语言