异常.我该如何解决这个问题?第一步



几周前,我一直在学习Java。我是新手,我犯了很多错误。今天我试图了解例外情况。我写了一个计算矩形平方的程序,但是当我输入侧面"a"(例如 c 字母)时它不起作用。我希望它向我显示类似"我们;)有问题"之类的字符串,但它会抛出错误。你可以帮我吗?

package Learning;
import java.io.*;
import java.util.Scanner;
public class Exceptions {
    public static void main(String[] args) throws IOException {
        double a,b,wynik;
        Scanner odc = new Scanner(System.in);
        try {
            System.out.println("Enter side a: ");
            a = odc.nextDouble();
            System.out.println("Enter side b: ");
            b = odc.nextDouble();
            wynik=a*b;
            System.out.println("Field equals: "+wynik);
        }
        catch(NumberFormatException e){
            System.out.println("We have a problem ;)");
        }
    }
}

当我输入a面"c"字母时,我有这样的东西:

Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
    at Learning.Exceptions.main(Exceptions.java:11)

我需要看到:"我们;)有问题"

捕获InputMismatchException

catch(NumberFormatException | InputMismatchException e){ ... }

如果出现NumberFormatExceptionInputMismatchException,将执行System.out.println("We have a problem ;)");

如果要根据异常类型输出不同的结果,请为 InputMismatchException 创建另一个catch块。

你的代码永远不会抛出任何NumberFormatException
InputMismatchException 已经传达了将输入转换为double的不可能性。

请注意,NumberFormatExceptionInputMismatchException 是未经检查的异常(它们派生自 RuntimeException)。
即使这些异常未声明为由任何调用的方法引发,也可能引发此类异常。
所以一般来说,你可能想抓住它们,因为你知道它们可能会被扔掉,你想处理它。但是你应该注意,当它们可能被有效地抛出时,只捕获它们,因为它使代码更清晰。
这里的情况并非如此。

所以在您的情况下就足够了:

try {
    System.out.println("Enter side a: ");
    a = odc.nextDouble();
    System.out.println("Enter side b: ");
    b = odc.nextDouble();
    wynik=a*b;
    System.out.println("Field equals: "+wynik);
}
catch(InputMismatchException e){
    System.out.println("We have a problem ;)");
}

最新更新