为什么我的代码在看起来应该从while循环中断开?

时间:2013-12-02 20:08:55

标签: java while-loop

        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.");

当我输入我的代码时,就会发生这种情况。

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

代码将在收到用户收到的输入之前打破while循环,即使变量'cont'看起来仍然是“y”。有人可以帮我解释为什么会这样吗?感谢。

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

        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.");

然而,当我运行代码时,会出现同样的问题。它在等待用户输入之前打破了循环。

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

2 个答案:

答案 0 :(得分:2)

使用while ("y".equals(cont))代替while (cont == "y")

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

如果你想忽略下面的案例使用

while ("y".equalsIgnoreCase(cont))

答案 1 :(得分:0)

正如邹邹在评论==中所说,比较了两个对象在内存中指向的位置。 equals()比较了两个对象的值,因此您想要while(cont.equals('y')

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