12.16

47 阅读2分钟
package ex_score

object ex01 {
  def main(args: Array[String]): Unit = {
    //1. 读出项目目录下的score.txt文件
    val lines = scala.io.Source.fromFile("score.txt").getLines()
    // 按行读取
    for(line <- lines){
      println(line)
    }
  }
}
package ex_score

object ex01 {
  def main(args: Array[String]): Unit = {
    //1. 读出项目目录下的score.txt文件
    val lines = scala.io.Source.fromFile("score.txt").getLines()
    // 跳过第一行,它表示表头
    // 姓名,语文,数学
    lines.next()
    while(lines.hasNext){
      val line = lines.next()
      val list = line.split(" ")
      println(s"姓名: ${list(0)}")
      println(s"语文: ${list(1)}")
      println(s"数学: ${list(2)}")
      println(s"英语: ${list(3)}")
    }
  }
}

// 1. 包声明:将代码归属到ex_score包下,用于组织和管理代码结构

// 2. 定义单例对象ex01:Scala中没有“类的静态方法”,通过单例对象(Object)实现程序入口

// 3. 程序主入口方法(main方法):Scala程序的执行起点

// 4. 读取score.txt文件,获取文件的行迭代器

//6. 循环读取剩余行:hasNext判断是否还有未读取的行,有则继续循环

// 7. 获取当前行的内容

// 8. 按空格拆分当前行内容:split(" ")将一行字符串按空格分割成字符串数组

// 9. 打印拆分后的字段:通过数组下标获取姓名、语文、数学、英语成绩并格式化输出

case class Stu(name:String, yuwen:Double, shuxue:Double, yingyu:Double)

def main(args: Array[String]): Unit = {
  //1. 读出项目目录下的score.txt文件
  // lines 就是迭代器
  val lines = scala.io.Source.fromFile("score.txt").getLines()

  // 跳过第一行, 它表示表头
  // 语文, 数学, 英语
  lines.next()

  val stuList = scala.collection.mutable.ListBuffer[Stu]()
  while(lines.hasNext){
    val line = lines.next()
    val list = line.split(" ")
//    println(s"姓名: ${list(0)}")
//    println(s"语文: ${list(1)}")
//    println(s"数学: ${list(2)}")
//    println(s"英语: ${list(3)}")
    stuList += Stu(list(0), list(1).toDouble, list(2).toDouble, list(3).toDouble)
  }

  stuList.foreach(stu => {
    println(s"${stu.name}, 数学: ${stu.shuxue}分")
  })
}
object ex01 {

  case class Stu(name: String, yuwen: Double, shuxue: Double, yingyu: Double)

  def main(args: Array[String]): Unit = {
    //1. 读出项目目录下的score.txt文件
    val lines = scala.io.Source.fromFile("score.txt").getLines() // lines 就是迭代器

    // 跳过第一行, 它表示表头
    // 语文, 数学, 英语
    lines.next()

    val stuList = scala.collection.mutable.ListBuffer[Stu]()
    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.yingyu + stu.shuxue + stu.yuwen
      val avg = total / 3
      fileWriter.write(s"${stu.name}; 语文: ${stu.yuwen}分 数学: ${stu.shuxue}分 英语: ${stu.yingyu}分 总分: ${total} 平均分: ${avg}\n")
    })

    // 输出英语学科平均分
    fileWriter.write("英语平均分: ? 数学平均分: ? 语文平均分: ?\n")
    fileWriter.close()
  }
}