gpt4 book ai didi

Java:如何在吞下异常后调用先前的方法

转载 作者:行者123 更新时间:2023-12-02 03:02:23 24 4
gpt4 key购买 nike

我正在编写一些Java代码,如果发现异常,我想循环回到之前的方法。

这是我的代码的简化版本:

public class classA
{

public static void main(String[] args)
{
int number1 = askUserForFavoriteSum();
int number2 = askUserForAnotherNumber();
}

public static int askUserForFavoriteSum()
{
int firstFavorite;
int secondFavorite;
int favoriteSum

System.out.println("What is your first favorite number?");
firstFavorite = classB.getIntFromConsole();
System.out.println("What is your second favorite number?");
secondFavorite = classB.getIntFromConsole();

favoriteSum = firstFavorite + secondFavorite;
return favoriteSum;
}

public static int askUserForAnotherNumber()
{
int number;
System.out.println("What is another number?");
number = classB.getIntFromConsole();
return number;
}

}
<小时/>
public class classB
{
public static int getIntFromConsole()
{
Scanner scanner = new Scanner(System.in)
int value;

try
{
value = Integer.valueOf(scanner.nextLine());
}
catch (NumberFormatException e) //Occurs when the input string cannot cleanly be converted to an int.
{
System.out.println("ERROR: Invalid input! Please enter a whole number.");
}
return value;
}
}

例如,给定上面的两个类,我希望发生以下情况:

  1. 执行askUserForFavorite方法。
  2. 当提示用户输入他们最喜欢的第一个号码时,用户输入“Potatoe”。因此,会发生 NumberFormatException。
  3. “错误:输入无效!请输入整数。”被打印到控制台。
  4. askUserForFavorite 方法(再次)被执行。 这就是我正在努力解决的问题。
  5. 当提示输入 Collection 号码时,用户输入“2”。因此,不出现异常。

经过一些研究,我发现很多人都选择 Strategy Design Pattern但是,这不太适合我,因为我的 classA 方法中有动态变量,而接口(interface)与动态变量不能很好地配合。

在其他情况下,一些开发人员将“Callable < MethodReturnType >”参数传递到与我的“getIntFromConsole”方法等效的参数中,并调用反射(reflect)传入方法的 future 方法。这种方法看起来可行,但它需要我添加一个新的抽象层。

有没有一种方法可以让我简单地调用 classA 中调用 getIntFromConsole 方法的先前方法,而无需添加抽象层或接口(interface)?

最佳答案

将其改为循环即可

public static int getIntFromConsole()
{
Scanner scanner = new Scanner(System.in)
int value;

while (true) {
try
{
value = Integer.valueOf(scanner.nextLine());
break;
}
catch (NumberFormatException e)
{
System.out.println("ERROR: Invalid input! Please enter a whole number.");
}
}
return value;
}

关于Java:如何在吞下异常后调用先前的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42266219/

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