package day02;
import java.util.Arrays;
import java.util.Scanner;
import com.sun.xml.internal.bind.v2.model.core.ID;
public class Demo1 {
/**
* 从控制台输入学生的姓名、分数,数组固定为最少5个
* 存放到数组中
* 求班级的平均成绩、最高成绩(名字+分数)、最低成绩(名字+分数)
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[][] info = new String[10][2];
//这里还是不要设置10了 因为下面求平均值时 求数组长度会导致一处 需要判断一下值是否为null 否则会抛出异常
System.out.println("请您输入学生的名字以及成绩(空格隔开):");
String s;
int count=0;
while(true){
s = in.nextLine();
if(s.equals("end"))  {System.out.println("成绩输入完毕O(∩_∩)O!");break;}
//注意问题,字符串比较一定要用equals方法不能用等号啊
String temp[] = s.split(" ");
info[count][0] = temp[0];
info[count][1] = temp[1];
count++;
}
System.out.println("该班级成绩统计结果如下:");
for(int i=0;i<count;i++){
System.out.print(info[i][0]+" "+info[i][1]+"分 ");
}
System.out.println();
System.out.println("平均成绩:"+average(info));
System.out.println("最高成绩:"+sort(info, 1));
System.out.println("最低成绩:"+sort(info, 0));
}
public static float average(String[][] s){
int len1 = s.length , sum = 0 , len2 = s[0].length;
for(int i=0;i<len1;i++) {
if(s[i][len2-1]==null) break;
int num = Integer.parseInt(s[i][len2-1]);
sum = sum + num;
}
return sum/len1;
}
public static int sort(String[][] s,int flag){
int len1 = s.length , len2 = s[0].length ,tt=0;
int[] array = new int[len1];
for(int i=0;i<len1;i++) {
if(s[i][len2-1]==null) {tt=i;break;}
//需要判断是否为空 因为这里求出来的长定为10 而没有输入数据的都为空值
int num = Integer.parseInt(s[i][len2-1]);
array[i] = num;
}
Arrays.sort(array);
if(flag==1){
return array[len1-1];
}
else{
return array[len1-tt];
//tt值是用来标记实际存有数据的个数,因为传入的数组长度是10 而我们未必输入10个数组 所以其他数值均为空 这里如果输出array[0],那么求得的最低分数为0
}
}
}
//老师示范的输入成绩的方法,代码不完整,仅提供方法:
//Scanner scanner = new Scanner(System.in);
//String[] arrayName = new String[5];
//Double[] arrayScore = new Double[5];
//for(int i=0;i<5;i++){
//  String s = scanner.next();
//  String[] s1=  s.split(",");
//  arrayName[i] = s1[0];
//  arrayScore[i] = Double.parseDouble(s1[1]);
//}
//
//System.out.println("平均成绩:"+avgScore(arrayScore));
//.....
//求平均值:
//public double avgScore(double[] arrayScore){
//  double sum=0;
//  for(int i=0;i<arrayScore.length;i++){
//      sum+=arrayScore[i];
//  }
//  return sum/arrayScore.length;
//}
//求最大值:
//double MaxScore = arrayScore[0];
//String maxName = arrayName[0];
//for(int i=0; i< arrayScore.length;i++){
//  if(MaxScore<arrayScore[i]){
//      MaxScore = arrayScore[i];
//      maxName = arrayName[i];
//  }
//}

小练习:输入成绩存入数组,求平均成绩、最高成绩、最低成绩

遇到的几个小问题

1、控制输入结束

通过判断输入的值是否是“end”,可是一开始即使值为end,也无法退出,因为我使用的事等值符来判断的是否相等,记住字符串的比较应该用equals方法啊

2、因为我一开始声明的数组长度为10行,因此当在求平均值的时候,我是通过求数组行数判断的,因此当输入的成绩判断完后,循环还没有结束,因为我的数组行数为10啊,所以需要判断它的值是否为null,如果为null则无需进行字符串到整型值的转换,退出循环即可

3、求最大最小值时,输出最小值不可以是array[0],因为该值一定是空的啊所以输出会是零,需要标记一下有多少个实值。