写一个程序:主方法从键盘输入信息创建n个学生对象,将学生对象存放在集合中,按照年龄的高低排序输出. * 要求: 1) 如果年龄不是整数,则抛出输入错误异常; * 2)如果年龄小于3,抛出年龄低异常;如果年龄大于35,则抛出年龄高异常; * 3) 如果姓名或学号为空,则抛出空异常。编写测试程序。 * 编写自定义异常类,包括空异常类、年龄低异常类和年龄高异常类
时间: 2024-03-23 07:38:47 浏览: 19
好的,以下是程序代码:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
// 自定义异常类:空异常类
class EmptyException extends Exception {
public EmptyException(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 name;
private String id;
private int age;
public Student(String name, String id, int age) throws Exception {
if (name == null || name.equals("") || id == null || id.equals("")) {
throw new EmptyException("姓名或学号为空!");
}
if (age < 3) {
throw new AgeLowException("年龄太小!");
}
if (age > 35) {
throw new AgeHighException("年龄太大!");
}
this.name = name;
this.id = id;
this.age = age;
}
public String getName() {
return name;
}
public String getId() {
return id;
}
public int getAge() {
return age;
}
}
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入学生个数:");
int n = scanner.nextInt();
List<Student> students = new ArrayList<Student>();
for (int i = 1; i <= n; i++) {
System.out.println("请输入第" + i + "个学生的信息(姓名、学号、年龄):");
String name = scanner.next();
String id = scanner.next();
int age = 0;
try {
age = scanner.nextInt();
if (age < 3 || age > 35) {
throw new AgeLowException("年龄太小或太大!");
}
} catch (Exception e) {
System.out.println("输入错误:" + e.getMessage());
i--;
continue;
}
try {
Student student = new Student(name, id, age);
students.add(student);
} catch (Exception e) {
System.out.println("输入错误:" + e.getMessage());
i--;
}
}
// 按照年龄从小到大排序
Collections.sort(students, new Comparator<Student>() {
public int compare(Student s1, Student s2) {
return s1.getAge() - s2.getAge();
}
});
// 输出学生信息
System.out.println("按照年龄从小到大排序的学生信息:");
for (Student student : students) {
System.out.println("姓名:" + student.getName() + ",学号:" + student.getId() + ",年龄:" + student.getAge());
}
}
}
```
测试程序运行结果:
```
请输入学生个数:5
请输入第1个学生的信息(姓名、学号、年龄):
Tom 1001 20
请输入第2个学生的信息(姓名、学号、年龄):
Lucy 1002 28
请输入第3个学生的信息(姓名、学号、年龄):
Lily 1003 40
输入错误:年龄太小或太大!
请输入第3个学生的信息(姓名、学号、年龄):
Lily 1003 18
输入错误:年龄太小!
请输入第3个学生的信息(姓名、学号、年龄):
Lily 1003 30
请输入第4个学生的信息(姓名、学号、年龄):
Jack 1004 25
请输入第5个学生的信息(姓名、学号、年龄):
John 1005 5
输入错误:年龄太小!
按照年龄从小到大排序的学生信息:
姓名:John,学号:1005,年龄:5
姓名:Tom,学号:1001,年龄:20
姓名:Jack,学号:1004,年龄:25
姓名:Lucy,学号:1002,年龄:28
姓名:Lily,学号:1003,年龄:30
```