【发布时间】:2020-07-09 17:25:54
【问题描述】:
我在这里完全被难住了,经过几个小时的摆弄,我似乎无法让它工作:
下面的功能基本上是一个菜单。它会要求您输入 1、2 或 3 并返回该整数。
如果您输入除 int 以外的任何内容,它会捕获并再次启动菜单。 如果您输入 1-2-3 以外的 int,它会告诉您,然后再次启动菜单。
问题是,如果你输入了一个无效的值,它会告诉你正确的事情,重新启动菜单,但是如果你做了一个正确的输入,它会返回你之前尝试过的无效值,而不是新的、好的值.
我逐行跟踪它,它会从我的 if 中返回,然后在 try-catch 结束时返回返回,“choixDeMenu”恢复为旧的无效值并返回。如果你被告知它不是一个 int,它返回 0,但如果它是一个无效的 int,它会返回那个无效的 int。
如果您立即进行 VALID 输入,该函数将起作用并返回您的有效输入。只有当你先尝试无效的东西时,我才会遇到问题。
public static int menu()
{
int choixDeMenu = 0;
System.out.println ("Sélectionner le fichier à importer :");
System.out.println ("1. Partie 1.");
System.out.println ("2. Partie 2.");
System.out.println ("3. Partie 3.");
Scanner waitingForChoice = new Scanner(System.in);
try
{
choixDeMenu = waitingForChoice.nextInt();
if (choixDeMenu < 4 && choixDeMenu > 0)
{
waitingForChoice.close();
return choixDeMenu;
}
else
{
System.out.println("Entrée invalide. Entrer 1, 2, ou 3.");
menu();
}
}
catch (InputMismatchException e)
{
System.out.println("Doit être un chiffre. Entrer 1, 2, ou 3.");
menu();
}
catch (Exception e)
{
e.printStackTrace();
}
return choixDeMenu;
}
【问题讨论】:
-
您正在递归调用
menu(不幸的是),但您忽略了递归调用的返回值。最好使用while循环并且没有递归。
标签: java recursion try-catch java.util.scanner return-value