【问题标题】:How to escape this while-loop如何逃脱这个while循环
【发布时间】:2016-03-11 05:28:38
【问题描述】:

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

    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 循环。

【问题讨论】:

  • 当然。无论你键入什么,它要么与 y 不同,要么与 n 不同。您应该尝试使用 && 而不是 ||。
  • 我已经回答了你的问题。请检查:)

标签: java loops while-loop infinite-loop


【解决方案1】:

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

按照目前的编码,您是在说:

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

永远都是这样。

你想要的是:

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

编码为:

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

【讨论】:

  • 用 && 也试过了,结果还是一样。
  • fs5.directupload.net/images/151206/te6sh3fa.png(第一行来自另一个方法)
  • @Strict - 唯一的其他解释是 answer 的值不是您所期望的。如果你调试/打印出answer 的值,你会得到什么?
  • 打印出的答案与我输入的值相同。也许我应该使用 char 变量而不是字符串?不知道。
  • 刚刚通过打印输出将我的答案 (y) 与实际值 "y" 进行了比较 System.out.println(answer == "y");并且值是假的。所以尽管我输入 y,y 是 != "y"
【解决方案2】:

更改为:while(answer != "y" && answer != "n"),您的代码将按预期工作。

【讨论】:

    【解决方案3】:

    我怀疑您的问题出在此处: 而(回答!=“y”||回答!=“n”)

    当您的答案 =“y”时,它不是 =“n”,因此循环继续,反之亦然。

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

    【讨论】:

      【解决方案4】:

      我稍微更改了您的代码以接受字符。

      代码如下:

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

      【讨论】:

        猜你喜欢
        • 2020-08-26
        • 1970-01-01
        • 1970-01-01
        • 2012-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多