编写一个学生类,包括学号、姓名、年龄属性和一个构造方法,toString方法。2)主方法种键盘输入信息创建n个学生对象,将学生对象存放在集合中,按照年龄的高低排序输出. 要求: 1) 如果年龄不是整数,则抛出输入错误异常; 2)如果年龄小于3,抛出年龄低异常;如果年龄大于35,则抛出年龄高异常;3) 如果姓名或学号为空,则抛出空异常。编写测试程序。编写自定义异常类,包括空异常类、年龄低异常类和年龄高异常类。
时间: 2024-03-20 19:41:03 浏览: 50
写一个类Student,包含三个属性学号id,姓名name和年龄age;要求覆盖基类Object中的ToString()方法和Equals()方法,使得直接输出Student对象时输出的是对象的id,name和age信息;并且当两个对象的学号相同时认为它们相等;
4星 · 用户满意度95%
好的,我来为您解答这个问题。
以下是学生类的代码:
```java
public class Student {
private String id;
private String name;
private int age;
public Student(String id, String name, int age) throws InputErrorException {
if (id == null || id.equals("") || name == null || name.equals("")) {
throw new InputErrorException("姓名或学号不能为空");
}
if (age < 3) {
throw new AgeLowException("年龄太小");
}
if (age > 35) {
throw new AgeHighException("年龄太大");
}
if (age != (int) age) {
throw new InputErrorException("年龄必须是整数");
}
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String toString() {
return "学号:" + getId() + ",姓名:" + getName() + ",年龄:" + getAge();
}
}
```
异常类的代码:
```java
public class InputErrorException extends Exception {
public InputErrorException(String message) {
super(message);
}
}
public class AgeLowException extends Exception {
public AgeLowException(String message) {
super(message);
}
}
public class AgeHighException extends Exception {
public AgeHighException(String message) {
super(message);
}
}
```
主方法的代码:
```java
import java.util.*;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生数量:");
int n = scanner.nextInt();
List<Student> students = new ArrayList<>();
for (int i = 0; i < n; i++) {
System.out.println("请输入学号:");
String id = scanner.next();
System.out.println("请输入姓名:");
String name = scanner.next();
System.out.println("请输入年龄:");
int age = scanner.nextInt();
try {
Student student = new Student(id, name, age);
students.add(student);
} catch (InputErrorException | AgeLowException | AgeHighException e) {
System.out.println(e.getMessage());
i--;
}
}
students.sort(Comparator.comparingInt(Student::getAge));
for (Student student : students) {
System.out.println(student);
}
}
}
```
在主方法中,我们首先使用 Scanner 从控制台读入学生数量,然后循环读入每个学生的信息,并在创建学生对象时进行异常处理。如果有异常发生,则输出异常信息并回到上一个循环。
最后,我们使用 sort 方法对学生列表进行排序,并输出每个学生的信息。
阅读全文