题目:
在实际项目开发中需要存储各种类型的对象数据,一般使用数组存储存在存储个数不确定问题,通常使用集合类型来存储。给你的问题是,在学生信息系统中一个院系有班级信息和学生信息,一个班级有多个学生,每个学生属于一个班,在信息查询中往往需要进行某学生在那个班,该同学有那些同班同学等相关查询,如果使用集合合理存储了班级和学生对象,进行相关查询将变得容易。
本问题使用标准输入班级信息和学生信息,然后查出给定某同学的班级,以及该班同学人数和学号最前、最后的学生学号。
输入:
标准输入,输入的第一行为两个正整数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 Xingyuxingxi{
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)//没有就直接赋值
{
xs.put(s[1],1);
}
else
{
xs.put(s[1],xs.get(s[1])+1);//有则继续+1;
}
if(max.get(s[1])==null)//基础的比大小,打擂台
{
max.put(s[1],Long.parseLong(s[0]));//如果max没值则赋为第一个数
}
else
{
if(max.get(s[1])<Long.parseLong(s[0]))//如果max小就赋为大的数
{
max.put(s[1],Long.parseLong(s[0]));
}
}
if(min.get(s[1])==null)
{
min.put(s[1],Long.parseLong(s[0]));//如果min没值则赋为第一个数
}
else
{
if(min.get(s[1])>Long.parseLong(s[0]))//如果min大就赋为大的数
{
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)));
}
}
}
}
}