我正在尝试使用字符串输入(是或否)作为循环的标记。循环重复一个switch语句,最后提示用户是或否。在他们输入“是”作为答案之前,循环继续从用户接收数据。问题来自于试图获得哨兵的新价值。
***审核了评论并做了一些更改。这是更新后的代码:
Scanner input = new Scanner ( System.in );
System.out.print( "Please enter a product number, 1 - 5: ");
int product = input.nextInt();
double sum = 0;
boolean complete = false;
while (!complete) {
switch (product){
case 1: sum = sum + 2.98;
break;
case 2: sum = sum + 4.50;
break;
case 3: sum = sum + 9.98;
break;
case 4: sum = sum + 4.49;
break;
case 5: sum = sum + 6.87;
break;
}
System.out.print( "Is your order complete? Please type true or false:");
complete = in.nextLine();
}
所有这一切都在起作用,但我仍然无法打破哨兵的提示。我试图将它设置为用户键入true以结束循环的位置,或者设置为false以继续循环。我开始认为我忽略了一些东西。非常感谢您的帮助,谢谢。
答案 0 :(得分:2)
更改
default: String complete = input.Stream(); //Not coded, but will also ask for input.
到
default: complete = input.Stream(); //Not coded, but will also ask for input.
你正在重新声明一个字符串,这不是你想要的。并遵循使用.equals
给出的建议,而不是==
用于字符串或其他参考类型。
答案 1 :(得分:0)
因为你宣布它两次而感到紧张。取消第二个String
声明:
default: complete = input.Stream(); //Not coded, but will also ask for input.
答案 2 :(得分:0)
你宣布完成两次。尝试将您的默认案例陈述修改为:
默认值:完成= input.Stream()
答案 3 :(得分:0)
两件事:
1)您正在重新声明完成。默认情况应该是:
default: complete = input.Stream();
2)在Java中你无法将字符串与!=进行比较。每个String都是一个对象,通过使用比较运算符,您将比较对象的标识符,而不是对象的内容。除非它们是指向同一内存位置的两个字符串,否则Java永远不会看到两个String对象相等。要比较两个字符串的值,必须使用.equals()方法,例如:
while (!complete.equals("yes")) {
甚至更好的习惯:
while (!"yes".equals(complete)) {
这是更好的,因为如果完整的String变量为null,那么第一个比较将抛出空指针异常,而第二个不会,因为文字字符串“yes”将始终计算为非null对象。
希望有所帮助。
大卫