自学内容网 自学内容网

Scala习题

姓名,语文,数学,英语
张伟,87,92,88
李娜,90,85,95
王强,78,90,82
赵敏,92,88,91
孙涛,85,82,89
周梅,88,87,93
吴刚,80,85,86
郑洁,91,89,94
陈晨,83,84,88
林峰,86,91,87

1.读入文件

2.计算总成绩,并排列前三名

3.对各科成绩进行排序,并排列出前三名

最后的结果写到一个新文件

package test5

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,pingjunfen: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 content = it.next()
//      println(content)
      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,0)
    }
    val orderedList = list.sortWith((a,b)=>a.zongfen>b.zongfen)
    var mingci = 1;
    var curScore = -1;
    orderedList.foreach(s=>{
      if(s.zongfen != curScore){
        mingci += 1
        s.mingci = mingci
        curScore = s.zongfen
      }else{
        s.mingci = mingci
      }
    })
//    list.foreach(println)
    //4.排名
//   根据总分排名,取前三
    val li1 = list.sortWith((a,b)=>a.zongfen>b.zongfen).slice(0,3)
    li1.foreach(println)
    println("--------------------")
    //按语文排名取前三
    val li2 = list.sortWith((a,b)=>a.yuwen>b.yuwen).slice(0,3)
    li2.foreach(println)
    println("-----------------")
//按数学排名取前三
    val li3 = list.sortWith((a,b)=>a.shuxue>b.shuxue).slice(0,3)
    li3.foreach(println)
    println("---------------")
    //按英语排名取前三
    val li4 = list.sortWith((a,b)=>a.yingyu>b.yingyu).slice(0,3)
    li4.foreach(println)

    //5.写入
    val write = new PrintWriter("排名之后的结果.txt")
    list.foreach(s=>{
      write.println(s"姓名${s.name},语文${s.yingyu},数学${s.shuxue},英语${s.yingyu},总分${s.zongfen},平均分${s.pingjunfen}")
    })
    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},总分${s.zongfen}")
    })
    write.close()//结束输出

  }

}

完成之后目录之下会有新的文件


原文地址:https://blog.csdn.net/GZM1314YMX/article/details/144058848

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!