我正在尝试使用一种方法来显示错误消息,如果用户输入的数字不是1 - 4,但我的缺少返回语句错误。
public int CheckAnswers () {
boolean incorrectAnswer = true;
do {
playerAnswer = CheckAnswers();
if (playerAnswer < 1 || playerAnswer > 4) {
System.out.println("You have entered an incorrect number.");
System.out.println("Please enter a number between 1 and 4");
} else {
return (playerAnswer); }
} while (incorrectAnswer);
}
错误指向最后一个括号。我已经做了一些在线查看,我认为问题是我在 if-else语句的两个部分都没有return语句。但如果他们输入了错误的数字,我不想退回任何东西。我尝试使用以下代码失败。
public int CheckAnswers () {
boolean incorrectAnswer = true;
do {
playerAnswer = CheckAnswers();
if (playerAnswer < 1 || playerAnswer > 4) {
System.out.println("You have entered an incorrect number.");
System.out.println("Please enter a number between 1 and 4");
return (null);
} else {
return (playerAnswer); }
} while (incorrectAnswer);
}
答案 0 :(得分:3)
编译器的分析不确定
do {
playerAnswer = CheckAnswers();
if (playerAnswer < 1 || playerAnswer > 4) {
System.out.println("You have entered an incorrect number.");
System.out.println("Please enter a number between 1 and 4");
} else {
return (playerAnswer); }
} while (incorrectAnswer);
确实是一个无限循环,退出循环的唯一方法是return
分支中的else
。 (因为incorrectAnswer
除了宇宙光线翻转位之外不能改变,所以它是,但编译器不相信。)
因此,如果循环以不同的方式保留,它需要return
。
如果您将循环条件设为文字true
,
do {
// code
} while(true);
编译器会知道循环只能通过return
分支中的else
保留(你可以而且应该消除boolean incorrectAnswer;
)。
作为yannis hristofakis observed,在循环中立即调用playerAnswer = CheckAnswers();
会导致无限递归,这将导致堆栈溢出。您需要调用一个方法来获取用户的一些输入,而不是那里。
答案 1 :(得分:1)
我惊讶地发布了3个答案,但没有人提到
这是一个永恒的程序,因为你可以通过CheckAnswers
方法调用recursevly。
您无法返回null
原始返回类型方法。
我认为你应该跳过括号。
return playerAnswer;
答案 2 :(得分:0)
在do while之后立即执行返回-1的返回语句。 你永远不会达到那个代码,但它会使编译器感到高兴,他们无法理解代码的逻辑,只是看到有可能的执行路径没有返回任何东西。
public int CheckAnswers () {
boolean incorrectAnswer = true;
do {
playerAnswer = CheckAnswers();
if (playerAnswer < 1 || playerAnswer > 4) {
System.out.println("You have entered an incorrect number.");
System.out.println("Please enter a number between 1 and 4");
}
else {
return (playerAnswer);
}
} while (incorrectAnswer);
return -1; //unreachable statement
}
答案 3 :(得分:0)
试试这个:
public int CheckAnswers () {
boolean incorrectAnswer = true;
do {
playerAnswer = CheckAnswers();
if (playerAnswer < 1 || playerAnswer > 4) {
System.out.println("You have entered an incorrect number.");
System.out.println("Please enter a number between 1 and 4");
} else {
incorrectAnswer = false;
}
} while (incorrectAnswer);
return playerAnswer;
}