部分正确,这个方法很笨,直接用用空间换时间。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
/**
* 1080
* @author quchu
* @date 2019/10/21
*/
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashMap<String, int[]> hashMap = new HashMap<>();//String为对应的学号,int为对应的成绩,0:Gp, 1:Gmid-term, 2:Gfinal, 3:G(总成绩)
String [] nums=br.readLine().split("[ ]");
int p_count=Integer.parseInt(nums[0]);//编程成绩
int md_count=Integer.parseInt(nums[1]);//期中成绩
int f_count=Integer.parseInt(nums[2]);//期末成绩
int i=0;
while(i<(p_count+md_count+f_count)){
String[] scores=br.readLine().split("[ ]");
if(i<p_count){
//存储编程成绩:低于两百的学生不做存储
int[] scoreList = new int[4];
scoreList[0]=Integer.parseInt(scores[1]);
if(scoreList[0]>=200){
hashMap.put(scores[0],scoreList);
}
}else if(i<p_count+md_count){
//存储期中考试成绩:在已经有的成员的基础上添加成绩数据
if(hashMap.containsKey(scores[0])){
int[] scoreList = hashMap.get(scores[0]);
scoreList[1]=Integer.parseInt(scores[1]);
hashMap.put(scores[0],scoreList);
}
}else{
//存储期末考试成绩:在已经有的成员的基础上添加成绩数据
if(hashMap.containsKey(scores[0])){
int[] scoreList = hashMap.get(scores[0]);
scoreList[2]=Integer.parseInt(scores[1]);
//计算最终结果G,若总成绩大于60则判定为合格
if(scoreList[2]>scoreList[1]){
scoreList[3]=scoreList[2];
}else{
scoreList[3]=(int)(scoreList[1]*0.4+scoreList[2]*0.6+0.5);
}
}
}
i++;
}
//对结果进行过滤,使用迭代器将指定的不合格的数据进行删除并排序,
Set<Map.Entry<String, int[]>> entrySet = hashMap.entrySet();
List<Map.Entry<String, int[]>> entryArrayList = new ArrayList<>(entrySet);
Collections.sort(entryArrayList, new Comparator<Map.Entry<String, int[]>>() {
@Override
public int compare(Map.Entry<String, int[]> o1, Map.Entry<String, int[]> o2) {
int result=0;
//首先采用总成绩降序排序
result=o2.getValue()[3]-o1.getValue()[3];
//在总成绩相同的情况下使用学号递增排序
if(result ==0){
result=o1.getKey().compareTo(o2.getKey());
}
return result;
}
});
for (Map.Entry<String, int[]> stringEntry : entryArrayList) {
if (stringEntry.getValue()[3] > 60) {//成绩合格的学生
System.out.print(stringEntry.getKey());
for (int score : stringEntry.getValue()) {
if(score ==0){
score=-1;//当出现没有输入的情况下,将对应的成绩修改为-1
}
System.out.print(" " + score);
}
System.out.println();
}
}
br.close();
}
}