7-4 sdust-Java-学生成绩读取与排序 (35分)CSDN-markdown编辑器

陈允晨
2023-12-01
需要学习的知识
1.容器List
2.String的split方法
3.包装器类Integer

在这里插入代码片
package homework;
import java.util.*;

class Subject{//课程类,参数为课程名字,分数
	String name;
	int score;
	public Subject(String name, int score) {
		this.name = name;
		this.score = score;
	}
	
}
class Student implements Comparable<Student>{
	String name,id;//学生名字,id
	int idexofsub;//该学生课程数目
	Subject []a;
	public Student(String name,String id,int score,String nameofsub)
	{
		idexofsub=0;
		this.name=name;
		this.id=id;
		a=new Subject[10];//仅仅是开辟了空间,都是null
		a[idexofsub]=new Subject(nameofsub,score);//创建对象时至少有一门课
		idexofsub++;
	}
	public void add(String name,int score)//加入新的课程
	{
		a[idexofsub]=new Subject(name,score);
		idexofsub++;
	}
	public double averageScore()//计算平均成绩
	{
		double r=0;
		for (int i=0;i<idexofsub;i++)
		{
			r+=a[i].score;
		}
		return r/idexofsub;
	}
	@Override
	public int compareTo(Student o) {
		// TODO 自动生成的方法存根
		if (this.averageScore()!=o.averageScore())
		{
			 if(this.averageScore()>o.averageScore())//降序(从大到小排序)
				 return -1;
			 else
				 return 1;
		}
		else
		{
			return (Integer.parseInt(id)-Integer.parseInt(o.id));//升序(从小到大排序),parseInt为Integer的一个静态方法,将String变成数字
		}
	}
}
public class ListMain1 {
  public static void main(String []args)
  {
	  Scanner cin=new Scanner(System.in);
	  List<Student> L=new ArrayList<Student>();
	  String []msg=new String[5];
	  String s;
	  while (cin.hasNext())
	  {
		  //System.out.println("dws");
		  s=cin.nextLine();
		  if (s.equals("exit"))
			  break;
		  msg=s.split(",");//将字符串以逗号分隔开,并返回一个String类型的数组
		  boolean flag=false;
		  int i;
		  for ( i=0;i<L.size();i++)
		  {
			  if (L.get(i).id.equals(msg[1]))
			  {
				  flag=true;
				  break;
			  }
		  }
		  if (flag)
		  {
			  L.get(i).add(msg[0], Integer.parseInt(msg[3]));
		  }
		  else
		  {
			  L.add(new Student(msg[0],msg[1],Integer.parseInt(msg[3]),msg[2]));
		  }
	  }
	  L.sort(null);//List容器的方法,参数为null时调用容器中对象的ComparaeTo方法进行比较
	  for (int i=0;i<L.size();i++)
	  {
		  System.out.println("No"+(i+1)+":"+L.get(i).id+","+L.get(i).name);
	  }
	  cin.close();
  }
}



 类似资料: