Scala 统计学生成绩
题干
学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号、性别、课程名 1、课程名 2 等,后面每一行代表一个学生的信息,各字段之间用空白符隔开
Id gender Math English Physics
301610 male 80 64 78
301611 female 65 87 58
…
给定任何一个如上格式的清单(不同清单里课程数量可能不一样),要求尽可能采用函 数式编程,统计出各门课程的平均成绩,最低成绩,和最高成绩;另外还需按男女同学分开, 分别统计各门课程的平均成绩,最低成绩,和最高成绩。
源代码(命令台交互式)
import scala
.io
.Source
val inputfile
=Source
.fromFile
("/home/beyond-dhl/Desktop/dhl/grade1.txt")
val lines
= inputfile
.getLines
val Data
= lines
.map
{_
.split
(" ")}
val header
= originalData
.head
val courseNames
= header
.drop
(2)
val allStudents
= originalData
.tail
val stuNum
= allStudents
.length
val (maleLines
,femaleLines
) = allStudents partition
{_
(1)=="male"}
val courseNum
= courseNames
.length
for(i
<- 2 to courseNum
+1){
| val temp
= allStudents map
{elem
=> elem
(i
).toDouble
};
| println
("for xun huan jie guo:temp,avg,max,min");
| println
(temp
.sum
/stuNum
,temp
.min
,temp
.max
)}
val result
=
| (for (i
<-2 to courseNum
+1) yield {
| val temp1
= allStudents map
{ elem
=> elem
(i
).toDouble
};(temp1
.sum
/stuNum
, temp1
.min
, temp1
.max
)
| })
for(i
<- 0 to courseNum
-1){
| println
(courseNames
(i
));println
("avg,min,max:");println
(result
(i
))}
相应结果