Arrays.asList(new String[]{"1,張三,50", "2,李四,80", "3,王五,40", "4,張三,90", "5,王五,70"});
阿新 • • 發佈:2018-12-18
我這裡沒有使用TreeMap實現 而是使用3個List(name、score、len)分別存放所有姓名、每個姓名的總分數、每個姓名分數的個數 name、score、len的下標是一一對應的,也就是name的下標為1,那麼score的下標為1就是下標為1的name的總分數,len也是一樣
public class Exam { public static void main(String[] args) { List<String> list = Arrays.asList(new String[]{"1,張三,50", "2,李四,80", "3,王五,40", "4,張三,90", "5,王五,70"}); List<String[]> strList = new ArrayList<String[]>(); //按逗號把每一個String分成一個String陣列,存到strList列表中 for(String str : list){ strList.add(str.split(",")); } //存放所有name List<String> name = new ArrayList<String>(); //存放每一個name的總分數 List<Double> score = new ArrayList<Double>(); //存放每一個name分數的個數 List<Integer> len = new ArrayList<Integer>(); //初始化name、score、len(把strList的第一項賦值給name、score,len賦值為1 name.add(strList.get(0)[1].trim()); score.add(Double.parseDouble(strList.get(0)[2].trim())); len.add(1); boolean flag = false; /* * strList每一項String陣列的第二個(也就是名字)與name列表比較 * 如果有一個相等,name列表的那一項的分數與strList相等的那一項的分數相加,長度加1 如果沒有相等,則name、score、len執行add()方法,也就是把strList那一項的名字和分數作為add()的引數 */ for(int i = 1; i < strList.size(); i++){ for(int j = 0; j < name.size(); j++){ if(strList.get(i)[1].trim().equals(name.get(j))){ Double b = Double.parseDouble(strList.get(i)[2].trim()); score.set(j, b + score.get(j)); len.set(j, len.get(j)+1); flag = true; break; } } if(flag){ flag = false; }else{ name.add(strList.get(i)[1].trim()); score.add(Double.parseDouble(strList.get(i)[2].trim())); len.add(1); } } //把每一項的分數計算平均分 for(int i =0; i < score.size(); i++){ score.set(i, score.get(i) / len.get(i)); } Double tem; String str; Integer ing; //使用氣泡排序對分數進行升序排序,name和len也相應調整 for(int i = 0; i < score.size()-1; i++){ for(int j = 0; j < score.size()-1-i; j++){ if(score.get(j) > score.get(j+1)){ tem = score.get(j); score.set(j, score.get(j+1)); score.set(j+1, tem); str = name.get(j); name.set(j, name.get(j+1)); name.set(j+1, str); ing = len.get(j); len.set(j, len.get(j+1)); len.set(j+1, ing); } } } //列印輸出 for(int i = 0; i < name.size(); i++){ System.out.println(name.get(i)+"--"+score.get(i)+"--"+len.get(i)); } } }