用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()//结束输出
  }
}
相关推荐
life_time_2 小时前
C语言(22)
c语言·开发语言
Minner-Scrapy2 小时前
DApp 开发入门指南
开发语言·python·web app
孤雪心殇3 小时前
简单易懂,解析Go语言中的Map
开发语言·数据结构·后端·golang·go
庸俗今天不摸鱼3 小时前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
菠菠萝宝3 小时前
【Java八股文】10-数据结构与算法面试篇
java·开发语言·面试·红黑树·跳表·排序·lru
奔跑吧邓邓子3 小时前
【Python爬虫(36)】深挖多进程爬虫性能优化:从通信到负载均衡
开发语言·爬虫·python·性能优化·负载均衡·多进程
不会Hello World的小苗3 小时前
Java——链表(LinkedList)
java·开发语言·链表
lsx2024063 小时前
Perl 面向对象编程指南
开发语言
Allen Bright4 小时前
【Java基础-46.3】Java泛型通配符详解:解锁类型安全的灵活编程
java·开发语言