如何逃避这个while循环

时间:2015-12-06 16:08:13

标签: java loops while-loop infinite-loop

我编写了以下方法,在另一个调用此方法的方法中,boolean-return类型再次分配给另一个布尔值。

    private boolean answer() {

    Scanner input = new Scanner(System.in);
    boolean b = false;
    String answer = input.nextLine();

    while(answer != "y" || answer != "n") {
        System.out.println("Answer with y (yes) or n (no)");
        answer = input.nextLine();
    }
    if (answer == "y") {
        b = true;
    }
    return b;

}

但无论我输入什么(y,n或任何其他字母),我总是会再次进入while循环。

4 个答案:

答案 0 :(得分:1)

这是因为您的考试中有or而不是and

正如它目前编码的那样,你说:

  

虽然答案不是“y”,但它不是“n”,循环。

总是如此。

你想要的是:

  

虽然答案不是“y”,但它不是“n”,循环。

编码为:

while (answer != "y" && answer != "n") (

答案 1 :(得分:1)

更改为:MKMapSize,您的代码将按预期运行。

答案 2 :(得分:1)

我怀疑你的问题在于: while(answer!=“y”|| answer!=“n”)

当你的答案=“y”时,它不是=“n”,所以循环继续,反之亦然。

可能你想要这个: while(answer!=“y”&& answer!=“n”)

答案 3 :(得分:0)

我改变了你的代码以接受一个字符。

以下是代码:

private boolean answer() {

    Scanner input = new Scanner(System.in);
    boolean b = false;

    char answer = input.nextLine().toLowerCase().charAt(0);

    while(answer != 'y' || answer != 'n' ) {
        System.out.println("Answer with y (yes) or n (no)");
        //lower case so that it will get y or n, no matter what the casing is
        answer = input.nextLine().toLowerCase().charAt(0);
    }
    if (answer == 'y') {
        b = true;
    }
    return b;

}

或者如果你真的想要一个字符串

private boolean answer() {

    Scanner input = new Scanner(System.in);
    boolean b = false;
    String answer = input.nextLine();

    while( !(answer.equalsIgnoreCase("y") || answer.equalsIgnoreCase("n")) ) {
        System.out.println("Answer with y (yes) or n (no)");
        answer = input.nextLine();
    }
    if (answer.equalsIgnoreCase("y")) {
        b = true;
    }
    return b;
}
  

比较两个字符串时,请记得使用 .equals() .equalsIgnoreCase()