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