PTA (學生成績讀取與排序)
從鍵盤錄入多行學生成績的資訊,每行表示一個學生的一門課的成績,最後一行以“exit”結束。每行文字的格式為:學號,姓名,課程名,成績。程式能夠讀取學生及其成績,將具有相同學號的學生及其成績讀取到一個Student(學生類)類物件的列表(List)stuList中; 2)程式在讀取完學生及其成績的資料後,能夠將stuList中的學生按照平均成績降序排列(如果平均成績相同,學號數字小的排在前面), 並輸出排序後的學生學號、姓名和成績。
輸入格式:
多行表示的學生成績,每一行是一個學生的姓名、學號、課程名、成績(整數)。不同行可以是同一名學生(學號相同的為同一名學生)不同課程的成績。
輸出格式:
按照學生平均成績降序排序(平均成績相同的學號小的在前面)的學生排名(具體輸出格式參照樣例)。
輸入樣例:
小明,2001,Java,88
小剛,2002,Java,78
小丁,2003,Java,56
小巨集,2004,Java,85
小明,2001,Python,84
小剛,2002,Python,98
小丁,2003,JavaWeb,66
小巨集,2004,Algorithm,87
exit
輸出樣例:
No1:2002,小剛
No2:2001,小明
No3:2004,小巨集
No4:2003,小丁
-
按照行讀入學生的資訊,呼叫trim方法去掉收尾空格。然後將這行字串按照 ‘,’ 切分,切分出來是一個t陣列。t[0]是學生的名字,t[1]是學生的學號,t[2]是課程號,t[3]是分數。
-
由於名字可能會重複但是學號肯定是唯一標識的,對學號進行HashMap<String,Integer>對映,對映得到的數值可以當做陣列的下標這樣就可以方便快速索引查詢,複雜度低。然後建立一個student類並且重寫Comparable介面用於排序和一個ArrayList< student >的動態陣列,下標是學生,內容是一個學生的各種資訊。
-
對於每次獲得的資訊,先查詢是否有這個學生,如果有索引到下標重新計算平均成績。如果沒有先對映在利用索引儲存並計算平均成績,最後呼叫Collection.sort將ArrayList容器排序按照要求輸出即可。
import java.util.*;
class student implements Comparable<student>{
String name;
String id;
int sum;
double avg;
int cnt;
@Override
public int compareTo(student o) {
student one = (student) o;
if(this.sum-one.sum!=0)
return (int)(one.sum-this.sum);
else
return this.id.compareTo(one.id);
}
}
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
ArrayList<student> a = new ArrayList<>();
HashMap<String,Integer> m = new HashMap<>();
int cnt = 0;
while(true){
String s = cin.nextLine();
if(s.equals("exit")) break;
s = s.trim();
String [] t = s.split(",");
int x = Integer.parseInt(t[3]);
if(m.containsKey(t[1])){
int id = m.get(t[1]);
a.get(id).sum += x;
a.get(id).cnt++;
a.get(id).avg = 1.0*a.get(id).sum/a.get(id).cnt;
}
else{
m.put(t[1],cnt);
student st = new student();
st.sum = x; st.id = t[1];
st.name = t[0];st.cnt = 1;
st.avg = 1.0*st.sum/st.cnt;
a.add(st);
cnt++;
}
}
Collections.sort(a);
for(int i = 0;i < a.size();i++){
System.out.printf("No%d:%s,%s\n",i+1,a.get(i).id,a.get(i).name);
}
}
}
相關文章
- 【PTA】 學生成績錄入及查詢 (20分)
- 15.百萬考生成績如何排序 - 計數排序排序
- 學生成績管理
- KALDI-IO庫的生成與讀取
- PTA乙級 1004 成績排名
- 學生成績等級判斷
- 隨機字串生成與排序隨機字串排序
- sql統計-關於學生成績SQL
- RAG學習--pdf讀取與切割
- Django學生資訊管理系統(6)學生成績新增和學生成績查詢(多對對關係)Django
- 浙江大學 PTA C語言-實驗8.2 指標與字串 7-2 字串排序C語言指標字串排序
- C語言陣列求學生成績C語言陣列
- python學生成績管理系統【完整版】Python
- 讀取本地Excel檔案生成echartsExcelEcharts
- python中for語句讀取生成器Python
- Java 讀取txt檔案生成Word文件Java
- Python生成器讀取大檔案Python
- DreamJudge-1159-成績排序2.0排序
- python mysql實現學生成績管理系統蠖脲PythonMySql
- C++實現學生成績資訊登記表C++
- 基於java jsp的大學生成績管理系統JavaJS
- 學生成績管理系統——課程設計報告
- 【小白學PyTorch】17 TFrec檔案的建立與讀取PyTorch
- spark學習筆記--資料讀取與儲存Spark筆記
- 序列化篇 生成xml 以及讀取xmlXML
- C# 讀取txt檔案生成Word文件C#
- 利茲大學:研究發現不吃早飯的學生成績更差
- JavaScript 建立與讀取cookieJavaScriptCookie
- 一個Accecc_Token生成和快取和讀取類,微信/小程式開發必須學快取
- 學生成績錄入系統,需要判斷成績格式合格,使用throw彈出,最後並列印全班成績單
- JavaScript 寫入與讀取cookieJavaScriptCookie
- Python 排序---sort與sorted學習Python排序
- shell讀取構建檔案資訊生成json字串JSON字串
- NumPy 陣列排序、過濾與隨機數生成詳解陣列排序隨機
- 南昌航空大學pta總結
- 生成隨機字串並排序隨機字串排序
- 05小白學nodejs 檔案讀取NodeJS
- pta