循环没有循环?

时间:2016-10-07 16:08:08

标签: java recursion

我希望有人可以为我看一下这个。我刚刚开始使用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());

但没有运气。有没有办法在没有递归的情况下再次调用该函数?

3 个答案:

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