Scala文件读写案例:成绩分析

score.txt内容如下

复制代码
姓名,语文,数学,英语,java
张伟,87,92,88,89
李娜,90,85,95,89
王强,78,90,82,89
赵敏,92,88,91,89
孙涛,85,82,89,89
周梅,88,87,93,89
吴刚,80,85,86,89
郑洁,91,89,94,89
陈晨,83,84,88,89
林峰,86,91,87,89
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,
                    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() // 结束输出
  }
}
相关推荐
hopsky1 天前
《Scala 学习手册》核心内容详解
人工智能·学习·scala
abcy07121312 天前
scala playframework 搭建与新建controller教程
scala
lpfasd12312 天前
编程语言榜单变迁分析
开发语言·后端·scala
戮漠summer1 个月前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
醉熏的石头1 个月前
Ubuntu 中的编程语言(中)
linux·ubuntu·scala
Irene19911 个月前
Scala、Java、Python、JavaScript 的核心特性和应用场景(Python 的“单机“局限性:GIL 机制导致的多核并行缺陷)
java·javascript·python·scala
李白的天不白2 个月前
确认 Nginx 配置文件是否真的生效
scala
醉颜凉2 个月前
Scala自定义Monad实战:从理论到应用的完整指南
大数据·算法·scala
那晚的她2 个月前
Scala中Set集合
开发语言·后端·scala
IvanCodes2 个月前
二、Scala流程控制:分支与循环
大数据·scala