就当练习一下scala的基础知识吧,菜勿喷
package scala.system
import scala.collection.mutable.ListBuffer
import scala.io.StdIn
import util.control.Breaks._
class Student(var name:String,var id:String,var gender:String,var ChineseScore:Double,var MathScore:Double,var EnglishScore:Double) {
}
object Test{
def main(args: Array[String]): Unit = {
val student1 = new Student("张三","110","male",92,95,87)
val student2 = new Student("李四","111","male",89,93,90)
val student3 = new Student("小翠","112","female",95,93,99)
val student4 = new Student("小芳","113","female",93,96,98)
val student5 = new Student("王二","114","male",89,78,66.5)
val student6 = new Student("燕双鹰","115","male",97,98,80)
val student7 = new Student("小兰","116","female",96,99,98)
var chineseScore = ListBuffer[Double]()
chineseScore.append(student1.ChineseScore)
chineseScore.append(student2.ChineseScore)
chineseScore.append(student3.ChineseScore)
chineseScore.append(student4.ChineseScore)
chineseScore.append(student5.ChineseScore)
chineseScore.append(student6.ChineseScore)
chineseScore.append(student7.ChineseScore)
// println(chineseScore)
// println("语文成绩从小到大排序:"+sortScore(chineseScore).mkString(","))
// println("语文成绩从大到小排序:"+sortScore(chineseScore).reverse.mkString(","))
// println("语文成绩最高分:"+maxScore(chineseScore))
// println("语文成绩最低分:"+minScore(chineseScore))
// println("语文成绩平均分:"+averageScore(chineseScore))
// println()
var mathScore = ListBuffer[Double]()
mathScore.append(student1.MathScore)
mathScore.append(student2.MathScore)
mathScore.append(student3.MathScore)
mathScore.append(student4.MathScore)
mathScore.append(student5.MathScore)
mathScore.append(student6.MathScore)
mathScore.append(student7.MathScore)
// println("数学成绩从小到大排序:"+sortScore(mathScore).mkString(","))
// println("数学成绩从大到小排序:"+sortScore(mathScore).reverse.mkString(","))
// println("数学成绩最高分:"+maxScore(mathScore))
// println("数学成绩最低分:"+minScore(mathScore))
// println("数学成绩平均分:"+averageScore(mathScore)) //不知道为什么用.formatted("%.2f")保留两位小数会报错
// println()
var englishScore = ListBuffer[Double]()
englishScore.append(student1.EnglishScore)
englishScore.append(student2.EnglishScore)
englishScore.append(student3.EnglishScore)
englishScore.append(student4.EnglishScore)
englishScore.append(student5.EnglishScore)
englishScore.append(student6.EnglishScore)
englishScore.append(student7.EnglishScore)
// println("英语成绩从小到大排序:"+sortScore(englishScore).mkString(","))
// println("英语成绩从大到小排序:"+sortScore(englishScore).reverse.mkString(","))
// println("英语成绩最高分:"+maxScore(englishScore))
// println("英语成绩最低分:"+minScore(englishScore))
// println("英语成绩平均分:"+averageScore(englishScore))
// println()
val name:List[String] = List(student1.name,student2.name,student3.name,student4.name,student5.name,student6.name,student7.name)
// for (i <- 0 to chineseScore.length-1){
// println(name(i)+"的总成绩为:"+ (chineseScore(i)+mathScore(i)+englishScore(i)))
// }
// println()
// for (i <- 0 to chineseScore.length-1){
// println(name(i)+"的平均成绩为:"+ ((chineseScore(i)+mathScore(i)+englishScore(i))/3))
// }
val gender:List[String] = List("male","male","female","female","male","male","female")
var m_cSum: Double = 0
var m_mSum: Double = 0
var m_eSum: Double = 0
var f_cSum: Double = 0
var f_mSum: Double = 0
var f_eSum: Double = 0
var m_count = 0
var f_count = 0
for (j <- 0 to gender.length-1 ){
if (gender(j) == "male"){
m_count = m_count + 1
m_cSum = chineseScore(j) + m_cSum
m_mSum = mathScore(j) + m_mSum
m_eSum = englishScore(j) + m_eSum
}
else if (gender(j) == "female"){
f_count = f_count + 1
f_cSum = chineseScore(j) + f_cSum
f_mSum = mathScore(j) + f_mSum
f_eSum = englishScore(j) + f_eSum
}
}
// println("男生语文平均成绩:"+m_cSum/m_count)
// println("男生数学平均成绩:"+m_mSum/m_count)
// println("男生英语平均成绩:"+m_eSum/m_count)
// println("女生语文平均成绩:"+f_cSum/f_count)
// println("女生数学平均成绩:"+f_mSum/f_count)
// println("女生英语平均成绩:"+f_eSum/f_count)
println("----------------------------------------学生成绩分析系统-----------------------------------------")
println("请输入以下内容查询: 0(班级语文成绩信息) 1(班级数学成绩信息) 2(班级英语成绩信息) 3(个人成绩信息) 4(男女生各科平均成绩对比信息) 10(退出)")
breakable {
while (true) {
var num: Int = StdIn.readInt()
num match {
case 0 =>
println("语文成绩从小到大排序:" + sortScore(chineseScore).mkString(","))
println("语文成绩从大到小排序:" + sortScore(chineseScore).reverse.mkString(","))
println("语文成绩最高分:" + maxScore(chineseScore))
println("语文成绩最低分:" + minScore(chineseScore))
println("语文成绩平均分:" + averageScore(chineseScore))
case 1 =>
println("数学成绩从小到大排序:" + sortScore(mathScore).mkString(","))
println("数学成绩从大到小排序:" + sortScore(mathScore).reverse.mkString(","))
println("数学成绩最高分:" + maxScore(mathScore))
println("数学成绩最低分:" + minScore(mathScore))
println("数学成绩平均分:" + averageScore(mathScore)) //不知道为什么用.formatted("%.2f")保留两位小数会报错
case 2 =>
println("英语成绩从小到大排序:" + sortScore(englishScore).mkString(","))
println("英语成绩从大到小排序:" + sortScore(englishScore).reverse.mkString(","))
println("英语成绩最高分:" + maxScore(englishScore))
println("英语成绩最低分:" + minScore(englishScore))
println("英语成绩平均分:" + averageScore(englishScore))
case 3 =>
for (i <- 0 to chineseScore.length - 1) {
println(name(i) + "的总成绩为:" + (chineseScore(i) + mathScore(i) + englishScore(i)))
}
println()
for (i <- 0 to chineseScore.length - 1) {
println(name(i) + "的平均成绩为:" + ((chineseScore(i) + mathScore(i) + englishScore(i)) / 3))
}
case 4 =>
println("男生语文平均成绩:" + m_cSum / m_count)
println("男生数学平均成绩:" + m_mSum / m_count)
println("男生英语平均成绩:" + m_eSum / m_count)
println("女生语文平均成绩:" + f_cSum / f_count)
println("女生数学平均成绩:" + f_mSum / f_count)
println("女生英语平均成绩:" + f_eSum / f_count)
case 10 => println("正在退出系统 ending...")
case _ => println("请按提示正确输入!")
}
if (num == 10) {
break()
}
}
}
}
//将成绩从小到大排序
def sortScore(score:ListBuffer[Double]): ListBuffer[Double] ={
return score.sortWith((x, y) => x < y)
}
//求最大成绩
def maxScore(score:ListBuffer[Double]): Double ={
return score.max
}
//求最小成绩
def minScore(score:ListBuffer[Double]): Double ={
return score.min
}
//成绩求和
def sumScore(score:ListBuffer[Double]): Double ={
return score.sum
}
//求成绩平均值
def averageScore(score:ListBuffer[Double]): Double ={
return score.sum /score.length
}
}
/*
个人感觉可改进地方:
学生成绩等信息从外部输入,通过File类读取进来,通过创建对象来添加学生信息太死板
写了一些排序计算方法,但Test里一些操作可应该以封装成函数来调用,代码看起来会更清晰
正是因为采用创建对象来添加学生信息,想统计一些学生名字或id对应的其他信息时也不好调用,本来想使用map键值对来表示他们的映射关系的,但在对象里面也只能手动一个个创建map对象来填入数据
那些重复的append()方法也应该可以用for循环替代,但因为是对象所以无法解决
name和gender定义时候也是手动把对象里对应的数据插入,就感觉很low
*/