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