练习题(自用

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

package Scala9

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,var mingci:Int)

//成绩排名

object hddmkk {

  def main(args: Array[String]): Unit = {

    //0。准备一个空的List

    val list=ListBuffer[Student]()

// 1.读入文件 -按行读取 例子:val it = Source.fromFile("score.txt").getLines()

// drop(1)让迭代器跳过一个元素,因为第一行是表头,把第一行跳过去

    val it = Source.fromFile("score.txt").getLines().drop(1)

    //跳过一个元素

    while(it.hasNext){

      val content=it.next().split(",")

// println("姓名:",content(0))

// println("语文:",content(1).toInt)

// println("数学:",content(2).toInt)

// println("英语:",content(3).toInt)

      val total=content(1).toInt+content(2).toInt+content(3).toInt

// println("总:",total)

// println("平均分:",total/3)

      //3,添加学生到List

 

      list+=Student(content(0),content(1).toInt,content(2).toInt,content(3).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

      }

    }

    list.foreach(println)

 

 

// slice(0,3)=>取前三个 sortWith((a,b)=>a.zongfen>b.zongfen))=>排序

    //5.根据总分排名,取前三名

    val zf=list.sortWith((a,b)=>a.zongfen>b.zongfen).slice(0,3)

    zf.foreach(println)

    //6.按语文排名,取前三名

    val yw = list.sortWith((a, b) => a.yuwen > b.yuwen).slice(0, 3)

    yw.foreach(println)

    //7.按数学排名,取前三名

    val sx = list.sortWith((a, b) => a.shuxue > b.shuxue).slice(0, 3)

    sx.foreach(println)

    //8.按英语排名,取前三名

    val yy = list.sortWith((a, b) => a.yingyu > b.yingyu).slice(0, 3)

    yy.foreach(println)

 

    //写入一个新文件

    val writer=new PrintWriter("排名之后的结果.txt")

    //所有成绩

    list.foreach(s=>{

      writer.println(s"姓名:${s.name},语文:${s.yuwen},数学:${s.shuxue},英语:${s.yingyu},总分:${s.zongfen},平均分:${s.pinjunfen},名次为:${s.mingci}")

    })

    writer.println("*"*40)

    zf.foreach(s=>{

      writer.println(s"姓名:${s.name},总分:${s.zongfen}")

    })

    writer.println("*"*40)

    yw.foreach(s=>{

      writer.println(s"姓名:${s.name},语文:${s.yuwen},总分:${s.zongfen}")

    })

    writer.println("*"*40)

    sx.foreach(s=>{

      writer.println(s"姓名:${s.name},数学:${s.shuxue},总分:${s.zongfen}")

    })

    writer.println("*"*40)

    yy.foreach(s=>{

      writer.println(s"姓名:${s.name},英语:${s.yingyu},总分:${s.zongfen}")

    })

    writer.close()//结束输出

  }

}