1

如果用户输入的数字不是 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 语句的两个部分都没有返回语句。但如果他们输入了错误的号码,我不想返回任何东西。我尝试使用以下代码失败。

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

   }
4

4 回答 4

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

确实是一个无限循环,唯一能跳出循环的方法就是returnelse分支中。(因为incorrectAnswer除了宇宙射线翻转位之外不能改变,它是,但编译器不相信。)

因此它需要一个return以防循环以不同的方式离开。

如果将循环条件设为文字true

do {
    // code
} while(true);

编译器将知道循环只能通过分支return中的 the离开else(您可以并且应该消除boolean incorrectAnswer;then)。

正如yannis hristofakis 观察到的,在循环中立即调用playerAnswer = CheckAnswers();会导致无限递归,这将导致堆栈溢出。您需要调用一个从用户那里获取一些输入的方法。

于 2013-06-15T18:30:05.453 回答
1

我很惊讶发布了 3 个答案,但没有一个提到

  1. 这是一个永恒的过程,因为您递归地调用该CheckAnswers方法。

  2. 您不能返回 null原始返回类型方法。

我认为你应该跳过括号。

return playerAnswer;

于 2013-06-15T18:19:56.670 回答
0

只需在 do while 之后执行 return -1 的 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");
        } 
        else {
           return (playerAnswer); 
        }
    } while (incorrectAnswer);
    return -1; //unreachable statement
}
于 2013-06-15T18:13:48.150 回答
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;
}
于 2013-06-15T18:16:31.657 回答