168 - 学生Map
Time Limit: 1000 Memory Limit: 65535
Submit: 157 Solved: 114
Description
修改《学生列表》题目,使用学生Map来存放学生的集合,其中key为学号,value为学生对象
输出时按照学生的学号顺序输出
Input
学生个数
学生对象数据
操作数
操作内容
Output
按照学号顺序输出集合中的学生
Sample Input
4
1 wong 90
2 liu 80
3 chen 70
4 fang 60
3
add 5 duan 80
delete 3
set 4 70
Sample Output
no:1 name:wong score:90
no:2 name:liu score:80
no:4 name:fang score:70
no:5 name:duan score:80
HINT
Pre Append Code
Post Append Code
import java.util.Map;
import java.util.HashMap;
import java.util.Scanner;
class Student {//定义Student类
int no;
String name;
int score;
Student(int no,String name,int score)//构造函数
{
this.no=no;
this.name=name;
this.score=score;
}
@Override
public String toString(){//toString函数
return "no:"+no+" name:"+name+" score:"+score;
}
public boolean equals(Student s)//equals/hashcode函数!!!
{
if(this.no>s.no)
return true;
else
return false;
}
}
public class Main {
public static void main (String []args)
{
Map<Integer,Student> map =new HashMap<Integer,Student>();//构造一个列表(List)!!!
Scanner scan = new Scanner(System.in);//读入
int num=scan.nextInt();
int i;
for(i=0;i<num;i++)//构造一个学生列表对象(List)
{
int no=scan.nextInt();
String name= scan.next();//!!!
int score=scan.nextInt();
Student s =new Student(no,name,score);
map.put(s.no,s);
}
int j=scan.nextInt();
for(i=0;i<j;i++)
{
String flag=scan.next();//!!!
//add 添加一个学生(包含学号和学生姓名)
if(flag.equals("add"))//!!!
{
int no=scan.nextInt();
String name= scan.next();
int score=scan.nextInt();
Student u =new Student(no,name,score);
map.put(u.no,u);
}
//delete 删除一个学生(包含学号)
else if(flag.equals("delete"))//!!!
{
int no=scan.nextInt();
/*
方法二 在for-each循环中遍历keys或values。
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
//遍历map中的键
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}
//遍历map中的值
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}
*/
for (Integer key : map.keySet())
{
if(key==no)
{
map.remove(key);//Object remove(Object key);
break;
}
}
}
//set 修改一个学生信息(只修改某学号学生的成绩)
else if(flag.equals("set")) {//!!!
int no=scan.nextInt();
int score=scan.nextInt();
for (Integer key : map.keySet())
{
if(key==no)
{
map.get(key).score=score;
break;
}
}
}
}
for (Student value : map.values())
System.out.println(value.toString());//!!!
}
}