Java 为什么我的代码在看起来应该之前就中断了while循环?

Java 为什么我的代码在看起来应该之前就中断了while循环?,java,while-loop,Java,While Loop,当我输入代码时,在这一部分,就是这样 cont = "y"; while (cont == "y") { System.out.println("Enter money."); money = input.nextInt(); TestMachine.insertMoney(money); System.out.println("Enter more

当我输入代码时,在这一部分,就是这样

        cont = "y";
        while (cont == "y")
        {
            System.out.println("Enter money.");
            money = input.nextInt();
            TestMachine.insertMoney(money);

            System.out.println("Enter more money? ('y' for yes, anything else for no.)");
            cont = input.nextLine();
        }

        System.out.println("Enter how many tickets do you want.");
在收到用户输入之前,代码将中断while循环,即使变量“cont”看起来仍然是“y”。有人能帮我解释一下为什么会这样吗?谢谢

我被告知在代码中使用.equals()而不是==。现在看起来像这样

Enter money.
34
Enter more money? ('y' for yes, anything else for no.)
Enter how many tickets do you want.
然而,当我运行代码时,同样的问题也出现了。它在等待用户输入之前中断循环

        cont = "y";
        while ("y".equals(cont))
        {
            System.out.println("Enter money.");
            money = input.nextInt();
            TestMachine.insertMoney(money);

            System.out.println("Enter more money? ('y' for yes, anything else for no.)");
            cont = input.nextLine();
        }

        System.out.println("Enter how many tickets you want.");
使用
while(“y”.equals(cont))
代替
while(cont==“y”)

要在java中比较字符串对象,请使用.equals()方法而不是“==”运算符

如果您想忽略案例,请使用下面的方法

Enter money.
34
Enter more money? ('y' for yes, anything else for no.)
Enter how many tickets do you want.

正如ZouZou在评论中所说,比较两个对象在内存中指向的位置
equals()
比较两个对象的值,以便在(cont.equals('y')


只有在检查两个变量是否指向计算机内存中的同一对象时,才应该使用
=
运算符。在大多数情况下,最好使用
equals()

不要使用
=
比较字符串。使用
equals()
您输入了y还是y?如果您还想匹配y,您需要使用
.equalsIgnoreCase()
。我会在输入时使用
(cont.equalsIgnoreCase(“y”)
;您好,我以后会使用此方法,但是在我的代码中实现此方法后,会出现相同的结果和问题。@user2964689使用错误或例外更新您的问题,这是有效的!谢谢,您能告诉我为什么使用nextLine()不起作用,而使用next()吗是的,这两者之间的区别是什么?您得到的数据类型不同。您应该始终使用
.nextLine()
然后将该行解析为您需要的内容。我想,您是在使用
.nextXXXX()
之后再使用
.nextLine()
来解决问题的。请尝试使用
.nextLine()
仅此而已。我知道它可以工作,但这确实是最好的解决方案。如果你这样做,你将不得不将钱解析为整数,但这样会更安全。你的
.nextLine()
在为
.nextInt()键入了34次之后,就把返回的钱吃光了
34,但不是换行符。除非它是基本体type@redFIVE即使这样,我也倾向于告诉人们坚持.equals(),因为这只是一个好习惯。
while ("y".equalsIgnoreCase(cont))