首页 > 其他分享 >【Scala】练习题(成绩计算)

【Scala】练习题(成绩计算)

时间:2024-12-05 11:32:44浏览次数:5  
标签:练习题 avg chinese val Scala writer println 成绩 math

读取
姓名,语文,数学,英语
张伟,87,92,88
李娜,90,85,95
王强,78,90,82
赵敏,92,88,91
孙涛,85,82,89
周梅,88,87,93
吴刚,80,85,86
郑洁,91,89,94
陈晨,83,84,88
林峰,86,91,87
这个文件,按行读入,计算每个同学的总分和平均分,
每个科目的平均分,总分的前三名,单科的前三名,
把结果写入文件

import java.io.PrintWriter
import scala.io.Source
import scala.collection.mutable.ListBuffer
case class Student(name:String, chinese:Double, math: Double, english: Double,total:Double,avg:Double)
//案例:统计成绩
object test {
  def main(args: Array[String]): Unit = {
    //可变list ,保存所以的学生数据
    val studentList = ListBuffer[Student]()
    //1.按行读入文件
    val source = Source.fromFile("score.txt")
    val it = source.getLines()   //迭代器
    it.next()//跳过第一行
    while (it.hasNext){
      val arr = it.next().split(",")   //中文的逗号
      val name = arr(0)
      val chinese = arr(1).toDouble
      val math = arr(2).toDouble
      val english = arr(3).toDouble
      val total =chinese + math + english   //计算总分
      val avg =total/3    //计算平均分
//      println(name, chinese, math, english,total,avg)
      val s = Student(name, chinese, math, english,total,avg)
      studentList += s
    }
    source.close()
 
    //计算单科总分
    var avgchinese : Double = 0
    var avgmath: Double = 0
    var avgenglish: Double = 0
    studentList.foreach(s =>{
      avgchinese += s.chinese
      avgmath  += s.math
      avgenglish += s.english
    })
    println("语文平均分:",avgchinese / studentList.length)
    println("数学平均分:",avgmath / studentList.length)
    println("英语平均分:",avgenglish / studentList.length)
 
    //总分的前三名
    //思路:1.对所以的同学按总分从高到低排名
    val list1 = studentList.sortWith((a,b)=> a.total > b.total).slice(0,3)
    println("总分从高到低排名前三:")
    list1.foreach(println)
 
    //单科的前三名
    val list2 = studentList.sortWith((a,b)=> a.chinese > b.chinese).slice(0,3)
    println("语文前三:")
    list2.foreach(println)
    val list3 = studentList.sortWith((a,b)=> a.math > b.math).slice(0,3)
    println("数学前三:")
    list3.foreach(println)
    val list4 = studentList.sortWith((a,b)=> a.english > b.english).slice(0,3)
    println("英语前三:")
    list4.foreach(println)
 
    //写入文件
    val writer = new PrintWriter("统计成绩的结果") //创建一个全新的文件
    writer.println("姓名,语文,数学,英语,总分,平均分")
    studentList.foreach(s =>{
      val avg = String.format("%.1f", s.avg) //只保留一位有效数字
      writer.println(s"${s.name},${s.chinese},${s.math},${s.english},${s.total},${s.avg}")
    })
    writer.println("-"*40)
    writer.println("总分的前三")
    //总分的前三
    list1.foreach(s =>{
      val avg = String.format("%.1f", s.avg) //只保留一位有效数字
      writer.println(s"${s.name},${s.chinese},${s.math},${s.english},${s.total},${s.avg}")
    })
    writer.println("-"*40)
    writer.println("语文的前三")
    //语文的前三
    list2.foreach(s => {
      val avg = String.format("%.1f", s.avg) //只保留一位有效数字
      writer.println(s"${s.name},${s.chinese},${s.math},${s.english},${s.total},${s.avg}")
    })
    writer.println("-" * 40)
    writer.println("数学的前三")
    //数学的前三
    list2.foreach(s => {
      val avg = String.format("%.1f", s.avg) //只保留一位有效数字
      writer.println(s"${s.name},${s.chinese},${s.math},${s.english},${s.total},${s.avg}")
    })
    writer.println("-" * 40)
    writer.println("英语的前三")
    //英语的前三
    list4.foreach(s => {
      val avg = String.format("%.1f", s.avg) //只保留一位有效数字
      writer.println(s"${s.name},${s.chinese},${s.math},${s.english},${s.total},${s.avg}")
    })
    writer.println("-" * 40)
    writer.close() //关闭文件
  }
}

标签:练习题,avg,chinese,val,Scala,writer,println,成绩,math
From: https://blog.csdn.net/2401_83599586/article/details/144209376

相关文章

  • Scala 的模式匹配-基础使用
    模式匹配:swtich++ ,  case++先从一个简单的任务开始说起:   我们今天接到一个开发任务,就是根据身份证号码,输入这个人的籍贯。列如:42表示湖北,33表示浙江,11表示北京,31表示上海。defmain(args:Array[String]):Unit={//身份证valid="42900520202321......
  • Day6:杨辉三角、冒泡选择排序、交集存新数组、十名学生成绩、四组学生成绩
    题目:使用二维数组输出杨辉三角分析代码#include<stdio.h>#include<string.h>#include<stdlib.h>intmain(intargc,constchar*argv[]){      inth=10,l=10;   intarr[h][l];   //初始化数组   for(inti=0;i<h;i++)   {  ......
  • 基于Java+SSM+JSP学生信息管理系统(源码+LW+调试文档+讲解等)/学生信息/管理系统/学生
    博主介绍......
  • scala的模式匹配 进阶版
    守卫语句例子importscala.io.StdInobjecttest3{defmain(args:Array[String]):Unit={vala=StdIn.readInt()//if(a>=0&&a<=3)println("[0-3]")//elseif(a>4&&a<=8){println("[4-8]")}/......
  • 机器学习简单练习题 - 选择&简答(带答案)
    选择题(单选&多选) 机器学习发展的主要历史阶段有(多选)知识推理期知识工程期浅层学习深度学习 下列不属于机器学习的主要流派的是符号主义联想主义(联结主义)进化主义行为类推主义 下列属于数据挖掘任务的是(多选)异常检测关联分析聚类分类 ......
  • L2-015 互评成绩
    目录一、问题描述二、问题分析 三、源码解答四、时空复杂度分析五、参考资料一、问题描述学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编......
  • Java基础语法练习题11
    进一步深入算法思维!习题:打出实心金字塔和空心金字塔本人代码心得:这题所用时间大概25分钟,总的来说就是找规律。publicclassStars{publicstaticvoidmain(String[]args){//实心金字塔intm=5;for(inti=1;i<=m;i++){......
  • 用迭代器读取成绩
    1.迭代器,跳过第一个元素2.把字符串转成数字3.如何判断一个正整数是否可以被三整除?(1+2+3)%3==01.读入成绩,按行去读取-跳过第一个元素vallist=ListBuffer[Student]()valit=Source.fromFile("score.txt").getLines().drop(1)读入成绩-按行去读取while(it.......
  • 【纯干货分享】计算机毕业设计必看必学36113+PHP 高校成绩管理系统原创的定制程序,单
     高校成绩管理系统的设计与实现摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用PHP技术建设高校成绩管理系统。本设计主要实现集人性化、高效......
  • Z2400038 Java+Mysql+ssm+layui+freemarker的学生成绩管理系统的设计与实现(源代码 PPT
    学生成绩管理系统1.项目描述2.运行环境3.项目技术4.界面展示5.源码获取1.项目描述SSM+Layui+Freemarker学生成绩管理系统项目概述本项目旨在开发一个基于SSM(Spring+SpringMVC+MyBatis)框架的学生成绩管理系统,结合了Layui前端框架和Freemarker模板引擎,为用......