I am writing some Java code where I want to loop back to the earlier method, if an exception is found.
Here is a simplified version of my code:
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;
}
}
For example, given the two classes above, I want the following to happen:
After doing some research, I see that many people go with the Strategy Design Pattern, however, that doesn't suit me well because I have dynamic variables in my classA methods and interfaces don't play well with dynamic variables.
In other cases, some developers pass a "Callable < MethodReturnType >" parameter into their equivalent of my "getIntFromConsole" method and call a future method that mirrors the passed-in method. This approach seems like it would work, but it requires me to add a new layer of abstraction.
Is there a way in which I can simply call the previous method from classA that called my getIntFromConsole method, without adding a layer of abstraction or an interface?
Just change it to loop
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;
}