【问题标题】:input.nextLine() with a string inside a while loopinput.nextLine() 在while循环中带有一个字符串
【发布时间】:2018-01-15 15:25:40
【问题描述】:

我很难理解我的代码到底出了什么问题。我不是一个优秀的开发人员,我还在学习,所以非常欢迎所有提示! :)

所以我正在做的是有一个 while 循环来检查用户是否给了 Scanner 某个字母。如果有,则循环结束。如果不是,它会继续再次提问。

我的代码如下:

Scanner userInput = new Scanner(System.in);
String userAnswer = userInput.nextLine();
boolean isTrue = true;

     while (isTrue){
         if (userAnswer.equals("e")){
             System.out.println("Wrong, try again");
             userInput.nextLine();
         } else if (userAnswer.equals("k")) {
             System.out.println("That's right!"); 
             isTrue = false;
             break;
         }      
     } 

它工作,有点。如果用户给出答案“k”作为第一个答案,它会打印出“没错!”然后打破循环。如果用户给出答案“e”作为第一个答案,它会打印出“错了,再试一次”并给出一个新行再次回答,但是如果你写了正确的字母,即“k”,它仍然会打印出“错了,再试一次”循环,不会跳转到“else if”语句。

我该如何解决这个问题?提前非常感谢。

【问题讨论】:

  • 您需要在循环内处理扫描仪。否则,您不会读取用户写入的下一个字符。
  • 你需要使用userAnswer = userInput.readLine() 否则你的答案永远不会改变。

标签: java string loops while-loop user-input


【解决方案1】:

需要赋值nextLine的返回值

userAnswer = userInput.nextLine();

【讨论】:

    【解决方案2】:

    您没有将用户输入分配给循环内的userAnswer 变量。

    改变

    userInput.nextLine();
    

    userAnswer = userInput.nextLine();
    

    【讨论】:

      【解决方案3】:

      您必须重新分配值:

      while (isTrue){
           if (userAnswer.equals("e")){
               System.out.println("Wrong, try again");
               userAnswer  = userInput.nextLine();
           } else if (userAnswer.equals("k")) {
               System.out.println("That's right!"); 
               isTrue = false;
           }      
       } 
      

      【讨论】:

      • @davidxxx 也许。我已经删除了
      • 嘿,就是这样,太棒了!非常感谢! :)
      • @Grv21 如果这个回答对你有帮助,欢迎采纳
      【解决方案4】:

      String 是 Java API 中的不可变对象。因此,当您下次阅读时,您必须重新分配价值。

      public static void main(String[] args) {
          Scanner userInput = new Scanner(System.in);
          String userAnswer = userInput.nextLine();
          boolean isTrue = true;
          while (isTrue) {
              if (userAnswer.equals("e")) {
                  System.out.println("Wrong, try again");
                  userAnswer = userInput.nextLine();
              } else if (userAnswer.equals("k")) {
                  System.out.println("That's right!");
                  isTrue = false;
                  break;
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-01-15
        • 2022-01-26
        • 2017-03-29
        • 2013-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-26
        • 1970-01-01
        相关资源
        最近更新 更多