(四)分析数据
任务1:计算每个人的总分和平均分
// 读取信息结束
stuList.foreach(stu => {
val total = stu.yuwen+stu.shuxue+stu.yinyu
fileWriter.write(s"${stu.name},总分: ${total},平均分: ${total/3} \n")
println(s"${stu.name}写入成功")
})
fileWriter.close()
结果:
任务2:计算单科最高分
// 计算单科最高分
fileWriter.write("最高分 \n")
fileWriter.write(s"语文: ${stuList.map(_.yuwen).max} \n")
fileWriter.write(s"数学: ${stuList.map(_.shuxue).max} \n")
fileWriter.write(s"英语: ${stuList.map(_.yinyu).max} \n")
结果:
最高分
语文: 100.0
数学: 98.0
英语: 96.0
任务3:写出单科最高分的学生名字
// 计算单科最高分
fileWriter.write("最高分 \n")
val yuwen_max = stuList.map(_.yuwen).max
fileWriter.write(s"语文: ${yuwen_max} \n")
fileWriter.write(s"${stuList.filter(_.yuwen == yuwen_max).map(_.name).mkString(",")} \n")
val shuxue_max = stuList.map(_.shuxue).max
fileWriter.write(s"数学: ${shuxue_max} \n")
fileWriter.write(s"${stuList.filter(_.shuxue == shuxue_max).map(_.name).mkString(",")} \n")
val yinyu_max = stuList.map(_.yinyu).max
fileWriter.write(s"英语: ${yinyu_max} \n")
fileWriter.write(s"${stuList.filter(_.yinyu == yinyu_max).map(_.name).mkString(",")} \n")
结果:
最高分
语文: 100.0
小花,小明
数学: 98.0
小花
英语: 96.0
小花,小明
(五)保存结果
就是把前面计算得到的结果,重新写入到一个全新的文件,这个功能在前面的课程中学习过,直接写出即可。
// 3. 写入一个新的文件
val fileWriter = new FileWriter("score_result.txt")
全部代码
package score
import java.io.FileWriter
/*
* 任务
* 1. 读入根目录下的score.txt文件
* 使用getlines来以行为单位读取内容
* 2. 计算
* (1)每个同学的总分
* (2)平均分
* (3) 求单科最高分,学生名字
*
* 3. 把计算结果写入到score_result.txt文件中
*
* */
object score01 {
case class Stu(name:String,yuwen:Double,shuxue:Double,yinyu:Double)
def main(args: Array[String]): Unit = {
// 定义一个可变列表
val stuList = scala.collection.mutable.ListBuffer[Stu]()
// 1. 按照行为单位,一个一个去读入文件
val lines = scala.io.Source.fromFile("score.txt").getLines()
// 跳过第一行,第一行是表头
lines.next()
while(lines.hasNext){
val line = lines.next()
val list = line.split(",")
stuList += Stu(list(0),list(1).toDouble,list(2).toDouble,list(3).toDouble )
}
// 3. 写入一个新的文件
val fileWriter = new FileWriter("score_result.txt")
// 读取信息结束
stuList.foreach(stu => {
val total = stu.yuwen+stu.shuxue+stu.yinyu
fileWriter.write(s"${stu.name},总分: ${total},平均分: ${total/3},单科最高分: \n")
println(s"${stu.name}写入成功")
})
// 计算单科最高分
fileWriter.write("最高分 \n")
val yuwen_max = stuList.map(_.yuwen).max
fileWriter.write(s"语文: ${yuwen_max} \n")
fileWriter.write(s"${stuList.filter(_.yuwen == yuwen_max).map(_.name).mkString(",")} \n")
val shuxue_max = stuList.map(_.shuxue).max
fileWriter.write(s"数学: ${shuxue_max} \n")
fileWriter.write(s"${stuList.filter(_.shuxue == shuxue_max).map(_.name).mkString(",")} \n")
val yinyu_max = stuList.map(_.yinyu).max
fileWriter.write(s"英语: ${yinyu_max} \n")
fileWriter.write(s"${stuList.filter(_.yinyu == yinyu_max).map(_.name).mkString(",")} \n")
fileWriter.close()
}
}
结果:
张伟,总分: 267.0,平均分: 89.0,单科最高分:
李娜,总分: 270.0,平均分: 90.0,单科最高分:
王强,总分: 250.0,平均分: 83.33333333333333,单科最高分:
小花,总分: 294.0,平均分: 98.0,单科最高分:
小明,总分: 291.0,平均分: 97.0,单科最高分:
最高分
语文: 100.0
小花,小明
数学: 98.0
小花
英语: 96.0
小花,小明