用Java写一个求一元二次方程的根的程序实现自定义异常的抛出和捕获和Java内置异常的捕获与处理
时间: 2024-03-05 16:50:24 浏览: 23
好的,以下是Java代码实现:
```java
import java.util.Scanner;
public class QuadraticEquation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一元二次方程的三个系数(a,b,c):");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
try {
double[] roots = getRoots(a, b, c);
System.out.println("方程的两个根为:" + roots[0] + " 和 " + roots[1]);
} catch (QuadraticEquationException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println("程序出现异常:" + e.getMessage());
e.printStackTrace();
}
}
public static double[] getRoots(double a, double b, double c) throws QuadraticEquationException {
if (a == 0) {
throw new QuadraticEquationException("a不能为0");
}
double delta = b * b - 4 * a * c;
if (delta < 0) {
throw new QuadraticEquationException("方程无实数根");
}
double x1 = (-b + Math.sqrt(delta)) / (2 * a);
double x2 = (-b - Math.sqrt(delta)) / (2 * a);
return new double[]{x1, x2};
}
}
class QuadraticEquationException extends Exception {
public QuadraticEquationException(String message) {
super(message);
}
}
```
在这个程序中,我们定义了一个 `QuadraticEquationException` 自定义异常类,当出现不符合要求的情况时,我们可以通过抛出该自定义异常来提示用户错误信息。
在 `main` 方法中,我们通过 `Scanner` 类获取用户输入的方程系数,然后调用 `getRoots` 方法来求解方程的根。在 `getRoots` 方法中,我们首先判断 `a` 是否为 0,如果是,则抛出自定义异常;然后计算方程的判别式,如果小于 0,则抛出自定义异常;否则,计算方程的两个根并返回。
在 `main` 方法中,我们使用了 try-catch 块来捕获 `getRoots` 方法可能抛出的自定义异常,如果捕获到了,则打印异常信息;同时,我们还使用了一个 catch 块来捕获可能出现的其他异常,并打印异常信息和调用栈。这样可以让程序更加健壮,避免出现未处理的异常导致程序崩溃。
希望这个例子能够帮助到你!