题目:
在实际项目开发中需要存储各种类型的对象数据,一般使用数组存储存在存储个数不确定问题,通常使用集合类型来存储。给你的问题是,在学生信息系统中一个院系有班级信息和学生信息,一个班级有多个学生,每个学生属于一个班,在信息查询中往往需要进行某学生在那个班,该同学有那些同班同学等相关查询,如果使用集合合理存储了班级和学生对象,进行相关查询将变得容易。
本问题使用标准输入班级信息和学生信息,然后查出给定某同学的班级,以及该班同学人数和学号最前、最后的学生学号。
输入:
标准输入,输入的第一行为两个正整数N、M,N表示接下来的N行为班级信息,每行由班级编号、班级名称、入学年级,数据之间为一个逗号","分格;班级信息后M行为学生信息,可能有重复学生信息,学生信息的每行依次为学号、所在班级编号、姓名、性别、入学年构成,数据之间为一个逗号","分格。学生数据之后的所有行为学生学号数据,需要你完成查找的学生,每个学生查找信息使用一行输出。
输出:
标准输出,根据需要你查找的学生的学号使用一行输出该学生所在的班级编号和该班学生个数,并输出该班学号排序的第一个和最后一个学生的学号,中间使用一个空格隔开。如果该班只有一个学生,输出第一个学生学号,如果该该学号没有学生,输出”NO Student“。
输入样列:
5 13
2006405,5,2020
2006408,8,2020
2106402,2,2021
2106405,5,2021
2106406,6,2021
2000130841,2006408,杨凯,男,2020
2000130842,2006408,杨石磊,男,2020
2000130849,2006408,刘坤艳,男,2020
2000130501,2006405,文吉鑫,男,2020
2000130502,2006405,方大卫,男,2020
2000130503,2006405,伍一帆,男,2020
2000130504,2006405,赵天祺,男,2020
2000130505,2006405,易佳豪,男,2020
2000130506,2006405,欧阳哲浩,男,2020
2000130510,2006405,陈吉涛,男,2020
2000130501,2006405,文吉鑫,男,2020
2000130511,2006405,曹毅凡,男,2020
2000130501,2006405,文吉鑫,男,2020
2000130506
2000130508
2000130842
输出样列:
2006405 8 2000130501 2000130511
NO Student
2006408 3 2000130841 2000130849
代码一:
import java.util.*;
public class Main {
public static void main(String[] args) {
//数据录入存储
//解决数据存储 选择创建集合
Map<String,Classes1> classmap = new HashMap<String,Classes1>();
Map<String, Student4> stumap = new HashMap<String, Student4>();
int classnum,stunum;
Scanner in=new Scanner(System.in);
classnum = in.nextInt();
stunum = in.nextInt();
String line=in.nextLine();//读掉第一行的换行符
//读入班级信息
for(int i=0;i<classnum;i++){
line=in.nextLine();
String[] classdatas=line.trim().split(",");
classmap.put(classdatas[0],new Classes1(classdatas[0],classdatas[1],Integer.parseInt(classdatas[2])));
}
//读入学生信息
for(int i=0;i<stunum;i++){
line=in.nextLine();
String[] studatas=line.trim().split(",");
//2000130841,2006408,杨凯,男,2020
String classid = studatas[1];
Classes1 myclass = classmap.get(classid);
//需要考虑该学生是否重复
if(stumap.get(studatas[0])==null){
Student4 stu=new Student4(studatas[0],studatas[2],studatas[3],Integer.parseInt(studatas[4]),myclass);
//建立班级学生的关联
myclass.stuset.add(stu);
stumap.put(studatas[0],stu);
}
}
//业务处理
String stuid = null;
while(in.hasNextLine()){
stuid=in.nextLine();//需要处理的输入数据
Student4 stu=stumap.get(stuid);
//定制输出
if(stu==null)System.out.printf("NO Student\n");
else{
Classes1 cla=stu.classes;//
int stunmu = cla.stuset.size();
if(stunmu==1){
System.out.println(cla.classid+" "+cla.stuset.size()+" "+stu.stuid);
}else {
Student4[] stus = new Student4[cla.stuset.size()];
cla.stuset.toArray(stus);
Arrays.sort(stus,new MyComparator());
System.out.println(cla.classid+" "+cla.stuset.size()+" "+stus[0].stuid+" "+stus[cla.stuset.size()-1].stuid);
//学生数组进行学号排序
}
}
}
}
}
//数据类型定义
class Classes1{
String classid;
String classnum;
int grade;
Set<Student4> stuset=new HashSet<Student4>();//关联成员 每个班有多个学生
public Classes1(String classid,String classnum,int grade){
this.classid=classid;
this.classnum=classnum;
this.grade=grade;
}
}
class Student4 implements Comparable<Student4>{
String stuid;
//String classid;
Classes1 classes;//关联成员
String name;
String sex;
int enter_year;
public Student4(String stuid, String name, String sex, int enter_year, Classes1 classes){
this.stuid=stuid;
this.classes=classes;
this.sex=sex;
this.enter_year=enter_year;
this.name=name;
}
@Override
public int compareTo(Student4 stu) {
return this.stuid.compareTo(stu.stuid);
}
}
class MyComparator implements Comparator<Object> {
@Override
public int compare(Object o1, Object o2) {
Student4 a= (Student4) o1;
Student4 b=(Student4) o2;
int A= Integer.parseInt(a.stuid);
int B= Integer.parseInt(b.stuid);
if(A>B)return 1;
else return -1;
}
}
代码二:(来源:http://t.csdn.cn/9XKca)
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a= sc.nextInt();
int b= sc.nextInt();
sc.nextLine();
for (int i = 0; i < a; i++) {
String gg=sc.nextLine();
}
Map<String,Integer >xs=new HashMap<String,Integer>();
Map<String,String >ww=new HashMap<String,String>();
Map<String,Long> max=new HashMap<String,Long>();
Map<String,Long> min=new HashMap<String,Long>();
for (int i = 0; i < b; i++) {
String s[]=sc.nextLine().split(",");
if(ww.get(s[0])!=null)continue;
ww.put(s[0],s[1]);
if(xs.get(s[1])==null)//没有就直接赋值,有就+1
{
xs.put(s[1],1);
}
else
{
xs.put(s[1],xs.get(s[1])+1);
}
if(max.get(s[1])==null)//基础的比大小
{
max.put(s[1],Long.parseLong(s[0]));
}
else
{
if(max.get(s[1])<Long.parseLong(s[0]))
{
max.put(s[1],Long.parseLong(s[0]));
}
}
if(min.get(s[1])==null)
{
min.put(s[1],Long.parseLong(s[0]));
}
else
{
if(min.get(s[1])>Long.parseLong(s[0]))
{
min.put(s[1],Long.parseLong(s[0]));
}
}
}
while(sc.hasNext())
{
String str=sc.nextLine();
if (ww.get(str)==null) {
System.out.println("NO Student");
}
else {
if(max.get(ww.get(str)).equals(min.get(ww.get(str)))) {
System.out.println(ww.get(str) + " " + xs.get(ww.get(str)) + " " +max.get(ww.get(str)));//注意Long型不能直接比较相等,要用equals比较
}
else
{
System.out.println(ww.get(str) + " " + xs.get(ww.get(str)) + " " +min.get(ww.get(str))+" "+max.get(ww.get(str)));
}
}
}
}
}