gpt4 book ai didi

Java异常捕获后又自动抛出?

转载 作者:行者123 更新时间:2023-11-30 04:39:02 25 4
gpt4 key购买 nike

在学校,我正在创建一个简单的几何程序,询问形状的角数和坐标。为了防止错误的输入(即字符而不是整数),我想我应该使用异常处理。它似乎工作正常,但是一旦我输入错误,它就会捕获错误并设置一些默认值。它应该继续请求更多输入,但不知何故,这些最终捕获了相同的异常而不请求新输入。

public static void main(String[] args) {
Scanner stdin = new Scanner(System.in);

try {
int hoeken;
System.out.print("How many corners does your shape have? ");

try {
hoeken = stdin.nextInt();
if(hoeken < 3) throw new InputMismatchException("Invalid side count.");
}
catch(InputMismatchException eVlakken){
System.out.println("Wrong input. Triangle is being created");
hoeken = 3;
}

Veelhoek vh = new Veelhoek(hoeken);
int x = 0, y = 0;

System.out.println("Input the coordinates of your shape.");
for(int i = 0; i < hoeken; i++){
System.out.println("Corner "+(i+1));
try {
System.out.print("X: ");
x = stdin.nextInt();
System.out.print("Y: ");
y = stdin.nextInt();
} catch(InputMismatchException eHoek){
x = 0;
y = 0;
System.out.println("Wrong input. Autoset coordinates to 0, 0");
}
vh.setPunt(i, new Punt(x, y));
}

vh.print();

System.out.println("How may points does your shape needs to be shifted?");
try {
System.out.print("X: ");
x = stdin.nextInt();
System.out.print("Y: ");
y = stdin.nextInt();

} catch(InputMismatchException eShift){
System.out.println("Wrong input. Shape is being shifted by 5 points each direction.");
x = 5;
y = 5;
}

vh.verschuif(x, y);
vh.print();

} catch(Exception e){
System.out.println("Unknown error occurred. "+e.toString());
}
}

因此,如果用户首先尝试创建具有 2 条边的形状或输入字符而不是整数,则会产生 InputMismatchException 并处理它。然后,它应该通过询问角的坐标来继续程序,但它会不断抛出新的异常并处理它。

出了什么问题?

最佳答案

根据 API,您需要跳过错误条目才能获取下一个条目。“当扫描器抛出 InputMismatchException 时,扫描器将不会传递导致异常的 token ,以便可以通过其他方法检索或跳过它。”

在获取异常后调用skip()方法应该可以解决这个问题。 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

关于Java异常捕获后又自动抛出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12767395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com