達內實訓—第二天小練習(輸入班級成績 求平均分數 最大分數 最小分數)

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],因爲該值一定是空的啊所以輸出會是零,需要標記一下有多少個實值。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章