计算n!,捕获可能出现的异常。用java设计一个成绩录入系统,只需录入学生的考号(ID),姓名(name)和成绩(score) ,当输入的数据类型,数据范围出现错误时,使用系统内置的异常类和自定义的异常类来处理
时间: 2024-02-20 21:56:56 浏览: 73
好的,针对您的第一个问题,计算n!,以下是一个Java的示例代码:
```java
import java.util.Scanner;
public class Factorial {
public static long factorial(int n) throws IllegalArgumentException {
if(n < 0) {
throw new IllegalArgumentException("n must be non-negative");
}
if(n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个非负整数n: ");
int n = sc.nextInt();
sc.close();
try {
long result = factorial(n);
System.out.printf("%d的阶乘为%d\n", n, result);
} catch (IllegalArgumentException e) {
System.out.println("输入有误:" + e.getMessage());
} catch (Exception e) {
System.out.println("其他错误:" + e.getMessage());
}
}
}
```
该代码会计算输入的非负整数n的阶乘,同时捕获可能出现的IllegalArgumentException异常(即n为负数的情况),以及其他可能出现的异常。
针对您的第二个问题,设计一个成绩录入系统,以下是一个Java的示例代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class InvalidDataException extends Exception {
public InvalidDataException(String message) {
super(message);
}
}
class Student {
private int id;
private String name;
private int score;
public Student(int id, String name, int score) throws InvalidDataException {
if(id <= 0) {
throw new InvalidDataException("学生ID必须是正整数");
}
if(name == null || name.trim().length() == 0) {
throw new InvalidDataException("学生姓名不能为空");
}
if(score < 0 || score > 100) {
throw new InvalidDataException("学生成绩必须在0到100之间");
}
this.id = id;
this.name = name;
this.score = score;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
class ScoreRecorder {
private List<Student> students;
public ScoreRecorder() {
students = new ArrayList<>();
}
public void addStudent(int id, String name, int score) {
try {
Student student = new Student(id, name, score);
students.add(student);
System.out.printf("学生%s的成绩已成功录入\n", student.getName());
} catch (InvalidDataException e) {
System.out.println("录入失败:" + e.getMessage());
}
}
}
public class ScoreInput {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ScoreRecorder recorder = new ScoreRecorder();
while(true) {
System.out.print("请输入学生的考号(ID): ");
int id = sc.nextInt();
System.out.print("请输入学生的姓名(name): ");
String name = sc.next();
System.out.print("请输入学生的成绩(score): ");
int score = sc.nextInt();
recorder.addStudent(id, name, score);
System.out.print("是否继续录入?(y/n) ");
String answer = sc.next();
if(answer.equalsIgnoreCase("n")) {
break;
}
}
sc.close();
}
}
```
该代码定义了一个Student类来表示学生信息,以及一个ScoreRecorder类来管理学生信息的录入。录入时,会使用自定义的InvalidDataException类来捕获可能出现的数据类型、数据范围等错误,以保证录入数据的合法性。同时,使用Scanner类来读取用户输入,并通过循环来支持多次录入。