返回语句错误,返回null

时间:2013-06-15 18:07:28

标签: java

我正在尝试使用一种方法来显示错误消息,如果用户输入的数字不是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);

   }

4 个答案:

答案 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个答案,但没有人提到

  1. 这是一个永恒的程序,因为你可以通过CheckAnswers方法调用recursevly。

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

  3. 我认为你应该跳过括号。

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