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() // 结束输出
  }
}
相关推荐
爱吃香菜---www2 小时前
Scala
开发语言·c#·scala
小白的白是白痴的白4 小时前
11.25 Scala案例
scala
西域编娃6 小时前
探索Scala:文本分析与文件操作的艺术
开发语言·后端·scala
西域编娃6 小时前
解锁Scala编程:深入文本分析与数据处理的艺术
大数据·开发语言·后端·scala
懒惰的橘猫6 小时前
Scala读取单词的次数
scala
宅小海6 小时前
Scala文件读写——成绩分析
scala
2401_833788056 小时前
Scala的字符串
scala
为小三离家出走6 小时前
学习成绩排名
scala
爱吃香菜---www6 小时前
Scala中字符串
开发语言·后端·scala