单独取每一列计算好麻烦啊
还是自定义一个学生类用于计算吧
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上啥也没写,还得自己去网上找相关方法的使用😔