zoukankan      html  css  js  c++  java
  • 假期六

    统计学生成绩学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号、性别、课程名1、课程名 2 等,后面每一行代表一个学生的信息,各字段之间用空白符隔开
    给定任何一个如上格式的清单(不同清单里课程数量可能不一样),要求尽可能采用函数式编程,统计出各门课程的平均成绩,最低成绩,和最高成绩;另外还需按男女同学分开,分别统计各门课程的平均成绩,最低成绩,和最高成绩。

    object scoreReport
    {
    def main(args:Array[String])
    {
    //假设数据在当前目录下
    val inputFile=scala.io.Source.fromFile("test2-3.txt")

    //"\s"是字符串正则表达式,将每行按空白字符(包括空格/制表符)分开
    //由于可能涉及多次遍历,通过toList将Itertor装为List
    //originalData的类型为List[Array[String]]
    val originalData=inputFile.getLines.map{_.split{"\s+"}}.toList

    val courseNames=originalData.head.drop(2) //获取第一行中的课程名
    val allStudents=originalData.tail //去除第一行剩下的数据
    val courseNum=courseNames.length


    def statistc(lines:List[Array[String]])=
    {
    //for推导式,对每门课程生成一个三元组,分别表示总分,最低分和最高分
    (for(i<- 2 to courseNum+1) yield
    {
    //取出需要统计的列
    val temp =lines map
    {
    elem=>elem(i).toDouble
    }
    (temp.sum,temp.min,temp.max)
    })map{case(total,min,max)=>(total/lines.length,min,max)} //最后一个map对for的结果进行修改,将总分转为平均分
    }

    //输出结果函数
    def printResult(theresult:Seq[(Double,Double,Double)])
    {
    //遍历前调用zip方法将课程名容器和结果容器合并,合并结果为二元组容器
    (courseNames zip theresult)foreach
    {
    case(course,result)=>
    println(f"${course+":"}%-10s${result._1}%5.2f${result._2}%8.2f${result._3}%8.2f")
    }
    }

    //分别调用两个函数统计全体学生并输出结果
    val allResult=statistc(allStudents)
    println("course average min max")
    printResult(allResult)

    //按性别划分为两个容器
    val (maleLines,femaleLines)=allStudents partition
    {
    _(1)=="male"
    }

    //分别调用两个函数统计男学生并输出结果
    val maleResult=statistc(maleLines)
    println("course average min max")
    printResult(maleResult)

    //分别调用两个函数统计女学生并输出结果
    val femaleResult=statistc(femaleLines)
    println("course average min max")
    printResult(femaleResult)

    }

    }

  • 相关阅读:
    tracert命令与tracert (IP地址)-d有什么区别?
    linux下通过进程名查看其占用端口
    Union和Union All的区别
    外连接、内连接
    Linux 删除文件夹和文件的命令(强制删除包括非空文件)
    linux查看当前目录
    Linux chmod命令及权限含义
    MySQL的if,case语句
    case when
    java生成验证码图片
  • 原文地址:https://www.cnblogs.com/jbwen/p/12271532.html
Copyright © 2011-2022 走看看