我希望有人可以为我看一下这个。我刚刚开始使用Java,这是我的第一个项目,但它有一个奇怪的错误我似乎无法弄清楚。
该方法应该根据用户输入的内容返回true或false。它确实有效,唯一的问题就是要求用户两次。它接受输入,然后再次询问并对第二个输入进行评估。我不知道该怎么称呼它,但如果有人能说出发生了什么,我真的很感激!
public static boolean yesOrNo(){
System.out.print("Would you like to roll again? Type 'y' for yes or 'n' for no: ");
char c = screen.next().trim().charAt(0);
if (c == 'y' || c == 'Y' || c == 'n' || c == 'N') {
switch (c) {
case 'y': return (true);
case 'Y': return (true);
case 'n': return (false);
case 'N': return (false);
}
}
else {
System.out.println("Invalid input, try again!!");
yesOrNo();
}
return (true);
}
编辑:扫描仪的输入是
public static Scanner screen = new Scanner(System.in);
我在课程内部的程序顶部。它似乎没有在任何其他输入情况下给我带来问题。它不会打印任何其他内容,只是要求输入两次,即使我可以将一个print语句放在第一次获得该字符的位置。我也尝试将函数调用本身更改为
return(yesOrNo());
但没有运气。有没有办法在没有递归的情况下再次调用该函数?
答案 0 :(得分:5)
好的,你在yesOrNo()里面调用yesOrNo()的else上做的是递归。
要解决此问题,您需要从下次通话中返回答案;
else {
System.out.println("Invalid input, try again!!");
return yesOrNo();
}
答案 1 :(得分:1)
在你的其他地方,你再次调用该方法。
else {
System.out.println("Invalid input, try again!!");
yesOrNo();
}
答案 2 :(得分:0)
您可以使用while
循环而不是在此处使用递归。
public static boolean yesOrNo(){
boolean run = true;
while(run){
System.out.print("Would you like to roll again? Type 'y' for yes or 'n' for no: ");
char c = screen.next().trim().charAt(0);
if (c == 'y' || c == 'Y' || c == 'n' || c == 'N') {
switch (c) {
case 'y': return true;
case 'Y': return true;
case 'n': return false;
case 'N': return false;
}
run = false;
}
else {
System.out.println("Invalid input, try again!!");
}
}
return true;
}