gpt4 book ai didi

java - 为什么我的 catch block 永远循环?

转载 作者:行者123 更新时间:2023-12-04 00:59:15 25 4
gpt4 key购买 nike

我正在编写一个计算阶乘的程序,我编写了一个循环来捕获 NumberFormatException 和 InputMismatchException。 NumberFormatException 运行良好并循环回到 try block ,但 InputMismatchException 一遍又一遍地显示它的消息而不循环回到 try block 。我不确定我做错了什么。这是我的代码:

import java.util.*;

public class Factorial
{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
System.out.println("Factorial Test Program\n");

boolean success = false;

while (!success)
{
try
{
System.out.print("Enter an integer number: ");
int number = s.nextInt();

if (number < 0) throw new NumberFormatException();

long f = number;

for (int i = number-1; i>0; i--)
f *= i;

if (number==0) f=1;

System.out.printf("The factorial of %s is %s.\n", number, f);
success=true;

System.out.println("Done!");
}
catch (NumberFormatException e)
{
System.out.println("Factorial of this value cannot be represented as an integer");
}
catch (InputMismatchException e)
{
System.out.println("You must enter an integer - please re-enter:");
}
}
}
}

最佳答案

一旦输入了一个无效的整数,s.nextInt() 就会不断地通过 while 循环传递换行符,并且这个过程会不断重复 ad infinitum。另一方面,当 NumberFormatException 发生时,已经读取了一个有效的整数,因此没有换行符传递给 while 循环。

InputMismatchException 异常 block 中添加 s.nextLine() 将纠正此问题。

关于java - 为什么我的 catch block 永远循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19037331/

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