7-33 学生列表2 (20 分)
编写学生类,包含学号no、姓名name、成绩score,提供必要的构造函数、toString函数和equals/hashcode函数,其中,toString函数的格式为“no:xxx name:xxx score:xxx”,no参与equals和hashcode的计算 在main函数中构造一个容器存放学生对象 从命令行输入多个学生对象,存入列表中 从命令行中读入在列表对象上的操作,具体操作包含: add 添加一个学生(包含学号和学生姓名) delete 删除一个学生(包含学号) set 修改一个学生信息(只修改某学号学生的成绩) 完成操作后按学生的学号从小到大的顺序输出集合中的学生
输入格式:
学生个数 学生对象数据 操作数 操作内容
输出格式:
列表顺序输出集合中的学生
输入样例:
在这里给出一组输入。例如:
4
1 wong 90
2 liu 80
3 chen 70
4 fang 60
3
add 5 duan 80
delete 3
set 4 70
输出样例:
在这里给出相应的输出。例如:
no:1 name:wong score:90
no:2 name:liu score:80
no:4 name:fang score:70
no:5 name:duan score:80
参考答案
import java.util.*;
class Student implements Comparable{
private int no;
private String name;
private int score;
public Student(int no, String name, int score) {
this.no = no;
this.name = name;
this.score = score;
}
public Student(int no) {
this.no = no;
}
public void setNo(int no) {
this.no = no;
}
public int getNo() {
return no;
}
public void setScore(int score) {
this.score = score;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return no == student.no;
}
@Override
public int hashCode() {
return Objects.hash(no);
}
@Override
public String toString() {
return "no:" + this.no + " name:" + this.name + " score:" + this.score;
}
@Override
public int compareTo(Object o) {
return this.no - ((Student)o).getNo();
}
}
class Main{
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
TreeSet ts = new TreeSet();
for( int i = 0; i < n; i ++ ){
ts.add(new Student(cin.nextInt(), cin.next(), cin.nextInt()));
}
n = cin.nextInt();
for( int i = 0;i < n; i ++ ){
String str_c = cin.next();
switch ( str_c ){
case "add":
ts.add(new Student(cin.nextInt(), cin.next(), cin.nextInt()));
break;
case "delete":
ts.remove(new Student(cin.nextInt()));
break;
case "set":
int no = cin.nextInt();
int score = cin.nextInt();
Iterator it = ts.iterator();
while( it.hasNext() ){
Student s = (Student) it.next();
if( s.getNo() == no ){
s.setScore(score);
}
}
break;
}
}
for( Object o : ts ){
System.out.println(o);
}
cin.close();
}
}