1. 程式人生 > >Arrays.asList(new String[]{"1,張三,50", "2,李四,80", "3,王五,40", "4,張三,90", "5,王五,70"});

Arrays.asList(new String[]{"1,張三,50", "2,李四,80", "3,王五,40", "4,張三,90", "5,王五,70"});

我這裡沒有使用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));
		}
	}
}