Scala:给定成绩单,使用scala编程完成以下分析工作:(1)统计出各门课程的平均成绩,最低、高成绩,及格率;(2)男女同学分开, 分别统计各门课程的平均成绩,最低成绩,最高成寄鸡Official

单独取每一列计算好麻烦啊

还是自定义一个学生类用于计算吧

import java.util
import GradeCount_assignment.Student
import scala.io.Source
object GradeCount_assignment {
  def main(args: Array[String]): Unit = {
    //读取文件保存到grades
    var grades=for (line<-Source.fromFile("C:\\Users\\Emiya\\Desktop\\成绩单.txt").getLines())yield line
    //保存到列表中
    var gradesList=grades.toList
    var stuArray:util.ArrayList[Student]=new util.ArrayList[Student]()
    for(a<- 32 until gradesList.size)
      {
        //new 一个学生类对象
        var stuString:Array[String]=gradesList(a).split(",")
        //将列表项拆开作为参数传入student对象
        val student=new Student(stuString(0).toInt,stuString(1),stuString(2).toInt,stuString(3).toInt,stuString(4).toInt)
        //用stundent数组接受每个studnet对象
        stuArray.add(student)
      }
    //定义变量记录总成绩
    var sum_Chinese,sum_Math,sum_English=0;
    var grades_Chinese=new util.ArrayList[Int]()
    var grades_English=new util.ArrayList[Int]()
    var grades_Math=new util.ArrayList[Int]()

    for(a<- 0 until stuArray.size())
      {
        grades_Chinese.add(stuArray.get(a).grade_Chinese)
        grades_Math.add(stuArray.get(a).grade_Math)
        grades_English.add(stuArray.get(a).grade_English)
        sum_Chinese+=stuArray.get(a).grade_Chinese
        sum_Math+=stuArray.get(a).grade_Math
        sum_English+=stuArray.get(a).grade_English
      }
    //排序,方便找最大最小
    grades_Chinese.sort(null)
    grades_Math.sort(null)
    grades_English.sort(null)
    //输出平均成绩
    println("语文平均成绩:"+sum_Chinese/30+",数学平均成绩:"+sum_Math/30+",英语平均成绩:"+sum_English/30)
    //输出各科最高最低分:
    println("语文最低分为:"+grades_Chinese.get(0)+"最高分为:"+grades_Chinese.get(grades_Chinese.size()-1)+"及格率为"+rate(grades_Chinese))
    println("数学最低分为:"+grades_Math.get(0)+"最高分为:"+grades_Math.get(grades_English.size()-1)+"及格率为"+rate(grades_Math))
    println("英语最低分为:"+grades_English.get(0)+"最高分为:"+grades_English.get(grades_English.size()-1)+"及格率为"+rate(grades_English))
    println("----------------------------------------------------------------------------")
    //记录男女生人数
    var males=0;
    var females=0;
    //记录男女生总分
    var male_chinese,male_math,male_english=0
    var female_chinese,female_math,female_english=0
    //定义多个list存放男女生各科成绩
    var male_chineses:util.ArrayList[Int]=new util.ArrayList[Int]()
    var male_maths:util.ArrayList[Int]=new util.ArrayList[Int]()
    var male_englishs:util.ArrayList[Int]=new util.ArrayList[Int]()
    var female_chineses:util.ArrayList[Int]=new util.ArrayList[Int]()
    var female_maths:util.ArrayList[Int]=new util.ArrayList[Int]()
    var female_englishs:util.ArrayList[Int]=new util.ArrayList[Int]()
    //计算
    for(a<- 0 until stuArray.size())
      {
        if(stuArray.get(a).sex.equals("男"))
          {
            males+=1
            //计算男生各科成绩
            male_chinese+=stuArray.get(a).grade_Chinese
            male_math+=stuArray.get(a).grade_Math
            male_english+=stuArray.get(a).grade_English
            //将各科成绩加入对应list
            male_chineses.add(stuArray.get(a).grade_Chinese)
            male_maths.add(stuArray.get(a).grade_Math)
            male_englishs.add(stuArray.get(a).grade_English)
          }
        else {
          //计算女生各科成绩
          females+=1
          female_chinese+=stuArray.get(a).grade_Chinese
          female_math+=stuArray.get(a).grade_Math
          female_english+=stuArray.get(a).grade_English
          //将各科成绩加入对应list
          female_chineses.add(stuArray.get(a).grade_Chinese)
          female_maths.add(stuArray.get(a).grade_Math)
          female_englishs.add(stuArray.get(a).grade_English)
        }
      }
    //排序
    male_chineses.sort(null)
    male_maths.sort(null)
    male_englishs.sort(null)
    female_chineses.sort(null)
    female_maths.sort(null)
    female_englishs.sort(null)
    println("男生:")
    println("语文平均成绩:"+male_chinese/males+",数学平均成绩:"+male_math/males+",英语平均成绩:"+male_english/males)
    //输出各科最高最低分:
    println("语文最低分为:"+male_chineses.get(0)+"最高分为:"+male_chineses.get(male_chineses.size()-1)+"及格率为"+rate(male_chineses))
    println("数学最低分为:"+male_maths.get(0)+"最高分为:"+male_maths.get(male_maths.size()-1)+"及格率为"+rate(male_maths))
    println("英语最低分为:"+male_englishs.get(0)+"最高分为:"+male_englishs.get(male_englishs.size()-1)+"及格率为"+rate(male_englishs))
    println("----------------------------------------------------------------------------")
    println("女生:")
    println("语文平均成绩:"+female_chinese/males+",数学平均成绩:"+female_math/males+",英语平均成绩:"+female_english/males)
    //输出各科最高最低分:
    println("语文最低分为:"+female_chineses.get(0)+"最高分为:"+female_chineses.get(female_chineses.size()-1)+"及格率为"+rate(female_chineses))
    println("数学最低分为:"+female_maths.get(0)+"最高分为:"+female_maths.get(female_maths.size()-1)+"及格率为"+rate(female_maths))
    println("英语最低分为:"+female_englishs.get(0)+"最高分为:"+female_englishs.get(female_englishs.size()-1)+"及格率为"+rate(female_englishs))
    println("----------------------------------------------------------------------------")
    //计算总排名,调用sort函数并重写,按照总分比较,总分相同按照语文成绩排序
    util.Collections.sort(stuArray)
    println("总排名为:")
    for(a<- (0 until stuArray.size()).reverse)
      {
        //输出总排名
        println("学号:"+stuArray.get(a).id+"||性别:"+stuArray.get(a).sex+"||语文成绩:"+stuArray.get(a).grade_Chinese+"||数学成绩:"+stuArray.get(a).grade_Math+"||英语成绩:"+stuArray.get(a).grade_English+"||总成绩:"+stuArray.get(a).sumScore)
      }
  }
  //计算及格率函数
  def rate(arrayList: util.ArrayList[Int]):String={
    var rate=0;
    for(a <-0 until arrayList.size()) {
        if(arrayList.get(a)>=60) {
          rate += 1
        }
      }
    return (rate/arrayList.size().toDouble).formatted("%.2f")
  }

  //定义一个学生类
  class Student(int: Int,string: String,grade1:Int,grade2:Int,grade3:Int)extends Comparable[Student]
  {
    //构造方法在类名
    var id:Int=int
    var sex:String=string
    var grade_Chinese:Int=grade1
    var grade_Math:Int=grade2
    var grade_English:Int=grade3
    //定义总分函数
    def sumScore:Int={
      return grade_Chinese+grade_Math+grade_English
    }
    //重写compareTo接口
    override def compareTo(other_student: Student): Int ={
      var result=this.sumScore-other_student.sumScore
      if(result>0)
        {
          result= 1
        }
      else if(result<0)
        {
          result= -1
        }
      else {//result==0
        //如果总分相同,按语文成绩得分排名
        result=this.grade_Chinese-other_student.grade_Chinese
        if(result>0)
          {
            result=1
          }
        else result= -1
      }
      return  result
    }
  }
}

(⊙﹏⊙)inspur的讲义ppt上啥也没写,还得自己去网上找相关方法的使用😔

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值