编写一个学生类,包括学号、姓名、年龄属性和一个构造方法,toString方法。2)主方法中键盘输入信息创建n个学生对象,将学生对象存放在集合中,按照年龄的高低排序输出. 要求: 1) 如果年龄不是整数,则抛出输入错误异常; 2)如果年龄小于3,抛出年龄低异常;如果年龄大于35,则抛出年龄高异常;3) 如果姓名或学号为空,则抛出空异常。编写测试程序。编写自定义异常类,包括空异常类、年龄低异常类和年龄高异常类。
时间: 2024-03-18 22:42:05 浏览: 56
以下是实现上述要求的代码:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
// 自定义空异常类
class NullException extends Exception {
public NullException(String message) {
super(message);
}
}
// 自定义年龄低异常类
class AgeLowException extends Exception {
public AgeLowException(String message) {
super(message);
}
}
// 自定义年龄高异常类
class AgeHighException extends Exception {
public AgeHighException(String message) {
super(message);
}
}
// 学生类
class Student {
private String id; // 学号
private String name; // 姓名
private int age; // 年龄
public Student(String id, String name, int age) throws NullException, AgeLowException, AgeHighException {
if (id == null || name == null) {
throw new NullException("姓名或学号不能为空!");
}
if (age < 3) {
throw new AgeLowException("年龄不能小于3岁!");
}
if (age > 35) {
throw new AgeHighException("年龄不能大于35岁!");
}
this.id = id;
this.name = name;
this.age = age;
}
public String toString() {
return "学号:" + id + ",姓名:" + name + ",年龄:" + age;
}
public int getAge() {
return age;
}
}
public class StudentTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<Student> students = new ArrayList<>();
int n = 0;
while (true) {
System.out.print("请输入第" + (n + 1) + "个学生的学号:");
String id = scanner.nextLine();
System.out.print("请输入第" + (n + 1) + "个学生的姓名:");
String name = scanner.nextLine();
System.out.print("请输入第" + (n + 1) + "个学生的年龄:");
int age = 0;
try {
age = Integer.parseInt(scanner.nextLine());
students.add(new Student(id, name, age));
n++;
} catch (NumberFormatException e) {
System.out.println("输入错误,请输入整数年龄!");
} catch (NullException | AgeLowException | AgeHighException e) {
System.out.println(e.getMessage());
}
if (n == 3) {
break;
}
}
Collections.sort(students, new Comparator<Student>() {
public int compare(Student s1, Student s2) {
return s2.getAge() - s1.getAge();
}
});
System.out.println("按年龄排序输出学生信息:");
for (Student student : students) {
System.out.println(student.toString());
}
}
}
```
运行程序后,按照要求输入学生信息,如果有输入错误或异常,则会提示错误信息;如果所有学生信息输入完毕,则会按照年龄从高到低的顺序输出学生信息。