Java input.nextLine(),在while循环中包含字符串

Java input.nextLine(),在while循环中包含字符串,java,string,loops,while-loop,user-input,Java,String,Loops,While Loop,User Input,我很难理解我的代码到底出了什么问题。我不是一个好的开发人员,我还在学习,所以所有的提示都非常受欢迎!: 所以我要做的是有一个while循环来检查用户是否给了扫描器一个特定的字母。如果有,循环结束。如果没有,它会继续问这个问题 我的代码如下: Scanner userInput = new Scanner(System.in); String userAnswer = userInput.nextLine(); boolean isTrue = true; while (isTrue)

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

所以我要做的是有一个while循环来检查用户是否给了扫描器一个特定的字母。如果有,循环结束。如果没有,它会继续问这个问题

我的代码如下:

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语句


我该如何在这件事上自圆其说?提前非常感谢。

您需要指定nextLine的返回值


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

改变

userInput.nextLine();


您必须重新分配该值:

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

字符串在JavaAPI中是不可变的对象。所以,当你们下次阅读时,你们必须重新赋值

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

您需要在循环内处理扫描仪。否则,您将无法读取用户写入的下一个字符。您需要使用userAnswer=userInput.readLine,否则您的答案将永远不会更改。@davidxxx可能。我已经移除了,就是这样,太棒了!非常感谢@Grv21如果这个答案对你有帮助,请随意接受
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;
     }      
 } 
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;
        }
    }
}