scala的文件读写-成绩分析

23 阅读1分钟

任务分析

分成三步来完成按行读入,并拆分。

  1. 组装对象数组
  2. 对对象数组做数据处理
  3. 保存结果到文件

计算

  1. 每个同学的总分
  2. 平均分
  3. 求单科的最高分

基本代码

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,yingyu:Double)

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

    //定义一个可变List
    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.yingyu
      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 yingyu_max=stuList.map(_.yingyu).max
    filewriter.write(s"英语:${yingyu_max} \n")
    filewriter.write(s"考了英语最高分的人是:${stuList.filter(_.yingyu==yingyu_max).map(_.name).mkString(",")} \n")



    filewriter.close()

  }
}