在Scala中对迭代器的使用

发布于:2024-12-18 ⋅ 阅读:(96) ⋅ 点赞:(0)
package gjhs25

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,scala:Int,zongfen:Int,pingjunfen:Int,var mingci:Int)
object fspm {
  def main(args: Array[String]): Unit = {
//    准备一个空的List
    val list = ListBuffer[Student]()
//    读入文件 - 按行读取
//    drop(1)让迭代器跳过一个元素,因为第一行是表头,把第一行跳过去
    val cj = Source.fromFile("score.txt").getLines().drop(1)
//    跳过第一行
//    print(cj)
    while(cj.hasNext){
      val arr = cj.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+arr(4).toInt+arr(5).toInt
//      println("总分:",total)
//      println("平均分:",total/3)
//      添加学生到List
      list +=Student(arr(0),arr(1).toInt,arr(2).toInt,arr(3).toInt,arr(4).toInt,arr(5).toInt,total,total/5,0)
    }
    val orderList = list.sortWith((a, b) => a.zongfen > b.zongfen)
    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)
//    list.foreach(println)
    val li1 = list.sortWith((a,b)=>a.zongfen>b.zongfen).slice(0,3)
    println("总分前三名:")
    li1.foreach(println)
   println("语文前三名")
    val li2 = list.sortWith((c,d)=>c.yuwen>d.yuwen).slice(0,3)
    li2.foreach(println)
    println("数学前三名")
    val li3 = list.sortWith((c, d) => c.shuxue > d.shuxue).slice(0, 3)
    li3.foreach(println)
    println("英语前三名")
    val li4 = list.sortWith((c, d) => c.yingyu > d.yingyu).slice(0, 3)
    li4.foreach(println)
    println("平均分前三名")
    val li5 = list.sortWith((c, d) => c.pingjunfen > d.pingjunfen).slice(0, 3)
    li5.foreach(println)
//    写入
    val writer = new PrintWriter("排名之后的结果.txt")
    list.foreach(s=>{
      writer.println(s"姓名:${s.name},语文:${s.yuwen},数学:${s.shuxue},英语:${s.yingyu},Java:${s.java},Scala:${s.scala},总分:${s.zongfen},平均分:${s.pingjunfen},名次:${s.mingci}")
    })
    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.println("-" * 40)
    li3.foreach(s => {
      writer.println(s"姓名:${s.name},数学:${s.yuwen},总分:${s.zongfen}")
    })
    writer.println("-" * 40)
    li4.foreach(s => {
      writer.println(s"姓名:${s.name},英语:${s.yuwen},总分:${s.zongfen}")
    })
    writer.println("-" * 40)
    li5.foreach(s => {
      writer.println(s"姓名:${s.name},平均分:${s.yuwen},总分:${s.zongfen}")
    })

    writer.close()
  }

}