Java:吞咽异常后如何调用上一个方法

Java:吞咽异常后如何调用上一个方法,java,exception,abstraction,strategy-pattern,Java,Exception,Abstraction,Strategy Pattern,我正在编写一些Java代码,如果发现异常,我想返回到前面的方法 以下是我的代码的简化版本: public class classA { public static void main(String[] args) { int number1 = askUserForFavoriteSum(); int number2 = askUserForAnotherNumber(); } public static int askUserForFavo

我正在编写一些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;
    }

}

例如,鉴于上述两个类,我希望发生以下情况:

  • 执行askUserForFavorite方法
  • 当提示用户输入第一个喜爱的号码时,用户输入“Potatoe”。因此,出现NumberFormatException
  • “错误:输入无效!请输入整数。”打印到 控制台
  • askUserForFavorite方法被执行(再次)这就是我正在努力解决的问题。
  • 当提示输入收藏号码时,用户输入“2”。因此,没有 出现异常
  • 在做了一些研究之后,我发现很多人都同意,但这并不适合我,因为我的classA方法中有动态变量,并且接口不能很好地处理动态变量

    在其他情况下,一些开发人员将“Callable”参数传递到其等效的“getIntFromConsole”方法中,并调用反映传入方法的future方法。这种方法似乎可行,但它需要我添加一个新的抽象层

    有没有一种方法可以让我在不添加抽象层或接口的情况下,直接从调用getIntFromConsole方法的classA调用前面的方法?

    只需将其更改为循环即可

    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;
    }
    
    把它改成循环

    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;
    }
    

    使用while循环(即
    while(无效){askForIt}
    )您可以使
    getIntFromConsole
    进一步抛出
    NumberFormatException
    (可能将其包装成更合适的
    Exception
    ),在
    main
    中捕获它,然后重试(例如使用循环)。使用while循环(即
    while(无效){askForIt}
    )您可以使
    getIntFromConsole
    进一步抛出
    NumberFormatException
    (可能将其包装成更合适的
    异常
    ),在
    main
    中捕获它,然后重试(例如使用循环)。从逻辑上讲,这种方法似乎很合理。。。让我在我的实际代码中尝试一下(不是我在问题中包含的愚蠢示例),看看效果如何。如果有效的话,我会接受这个答案。不管怎样,谢谢你的解决方案。我是KISS的坚定支持者。从逻辑上讲,这种方法似乎是合理的。。。让我在我的实际代码中尝试一下(不是我在问题中包含的愚蠢示例),看看效果如何。如果有效的话,我会接受这个答案。不管怎样,谢谢你的解决方案。我强烈支持亲吻