任务目标:
1.计算每个同学的总分和平均分
2.按总分排名,取前三名
3.按单科排名,取前三名
下图为学生的成绩表
实现代码为:
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,zongfen:Int,pinjunfen: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(",")
// 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)
}
//4.排名
//根据总分排序,取前三名
val li1 = list.sortWith((a, b) => a.zongfen > b.zongfen).slice(0,3)
// li1.foreach(println)
//按语文排名,取前三名
val li2 = list.sortWith((a, b) => a.yuwen > b.yuwen).slice(0,3)
li2.foreach(println)
//5.写入
val write = new PrintWriter("排名之后的结果.txt")
list.foreach(s =>{
write.println(s"姓名:${s.name},语文:${s.yuwen},数学:${s.shuxue},英语:${s.yingyu},总分:${s.zongfen},平均分:${s.pinjunfen}")
})
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}")
})
write.close()//结束输出
}
}