几周前,我一直在学习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){ ... }
如果出现NumberFormatException
或InputMismatchException
,将执行System.out.println("We have a problem ;)");
。
如果要根据异常类型输出不同的结果,请为 InputMismatchException
创建另一个catch
块。
你的代码永远不会抛出任何NumberFormatException
。InputMismatchException
已经传达了将输入转换为double
的不可能性。
请注意,NumberFormatException
和 InputMismatchException
是未经检查的异常(它们派生自 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 ;)");
}