定义学生类覆盖Object中的方法实现Comparable接口 分数 20 作者 万静 单位 北京化工大学 定义一个学生类Student,成员变量包括:姓名,生日,学号,学校;重写方法toString,equals,hashCode;实现接口Comparable,按照学号大小进行比较;定义构造方法。 代码形式如下: public class Main{ public static void main(String[] args) { Scanner in=new Scanner(System.in); int num=in.nextInt(); Student[] studentArray = new Student[num]; for(int i=0;i<num;i++) { String name=in.next(); int year=in.nextInt(); int month=in.nextInt(); int day=in.nextInt(); String studentId=in.next(); String school=in.next(); studentArray[i]=new Student(name,year,month,day,studentId,school); } Arrays.sort(studentArray); for(Student s:studentArray) System.out.println(s); } } class Student implements Comparable { //给出Student的定义 } 输入格式: 第一行输入学生人数。其他各行每行输入一个学生的姓名,出生年月日,学号,学号,用空格分隔。 输出格式: 按照学号从小到大排序的学生信息,每个学生信息一行。 输入样例: 例如: 3 李翔 2002 10 9 202019001 北京化工大学 张凯 2002 11 23 202019015 北京化工大学 汪海 2002 7 5 202019012 北京化工大学 输出样例: 例如: Student[name=李翔, birthday=2002-10-09, studentId=202019001, school=北京化工大学] Student[name=汪海, birthday=2002-07-05, studentId=202019012, school=北京化工大学] Student[name=张凯, birthday=2002-11-23, studentId=202019015, sc
时间: 2024-02-14 14:08:45 浏览: 94
好的,下面是符合要求的代码:
```
import java.util.Arrays;
import java.util.Objects;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
Student[] studentArray = new Student[num];
for (int i = 0; i < num; i++) {
String name = in.next();
int year = in.nextInt();
int month = in.nextInt();
int day = in.nextInt();
String studentId = in.next();
String school = in.next();
studentArray[i] = new Student(name, year, month, day, studentId, school);
}
Arrays.sort(studentArray);
for (Student s : studentArray) {
System.out.println(s);
}
}
}
class Student implements Comparable<Student> {
private String name;
private Date birthday;
private String studentId;
private String school;
public Student(String name, int year, int month, int day, String studentId, String school) {
this.name = name;
this.birthday = new Date(year, month, day);
this.studentId = studentId;
this.school = school;
}
@Override
public String toString() {
return "Student[name=" + name + ", birthday=" + birthday +
", studentId=" + studentId + ", school=" + school + "]";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
Student student = (Student) o;
return Objects.equals(studentId, student.studentId);
}
@Override
public int hashCode() {
return Objects.hash(studentId);
}
@Override
public int compareTo(Student other) {
return this.studentId.compareTo(other.studentId);
}
class Date {
private int year;
private int month;
private int day;
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
@Override
public String toString() {
return year + "-" + String.format("%02d", month) + "-" + String.format("%02d", day);
}
}
}
```
在上面的代码中,我们定义了一个名为Student的类,并实现了Comparable接口。该类有四个属性name、birthday、studentId和school,分别表示学生的姓名、生日、学号和学校。我们还覆盖了Object中的toString、equals和hashCode方法,以便在打印学生对象时更方便地查看其属性,以及在比较学生对象时使用学号进行判断。最后,我们实现了Comparable接口中的compareTo方法,该方法将比较两个学生的学号,并返回结果。
在上面的代码中,我们还定义了一个内部类Date,用于表示学生的生日,并覆盖了其toString方法,以便在打印学生对象时更方便地查看其生日。
在main方法中,首先读入学生人数,然后读入每个学生的信息,并创建相应的学生对象。接着,我们使用Arrays.sort方法对学生数组进行排序,并打印排序后的结果。
需要注意的是,在读入学生信息时,我们使用了next方法读入字符串,并使用nextInt方法读入整数。此外,我们还使用了String类中的format方法来格式化日期字符串,以便输出格式符合要求。
阅读全文