我正在编写这个程序,并且不理解为什么循环不会退出并输出System.out.print()
。有人可以看看它并告诉我发生了什么事吗?
public class SalesTax
{
public static void main(String[] args)
{
// Input items for shopping cart
HashMap<String, Double> cart = new HashMap<String, Double>();
// Create a Scanner
Scanner input = new Scanner(System.in).useLocale(Locale.US);
//variables
String item;
double price;
boolean done = false;
String ans;
do
{
System.out.print("Enter the item then select enter followed by the price and enter.");
item = input.nextLine();
price = input.nextDouble();
cart.put(item, price);
System.out.print("If done type done if not continue with adding to cart.");
ans = input.nextLine();
if(ans.equals("Done"))
done = true;
else
item = input.nextLine();
price = input.nextDouble();
cart.put(item, price);
System.out.print("If done type done if not continue with adding to cart.");
} while( !done);
System.out.print("Yo");
}
}
答案 0 :(得分:4)
问题是else
块周围没有花括号:尽管你已正确缩进块,但缩进并不重要:只有第一行
item = input.nextLine();
被视为else
的一部分;其余的是无条件执行。
请注意,只有一个地方可以将done
设置为true
,您可以使用&#34; forever&#34替换do
/ while
循环;循环,并使用break
退出中间的循环:
while (true) {
...
if (ans.equals("Done")) {
break;
}
...
}
这使得声明done
变量不必要。
答案 1 :(得分:1)
除了缺少大括号外,您的程序还会显示键入done
的说明,但程序实际上会检查Done
。 equals
方法要求字母大小写完全相同。因此,如果您按照说明操作,可能会显示您的循环永不退出。
这是解决该问题的一种方法:
if(ans.equalsIgnoreCase("Done"))
答案 2 :(得分:0)
public static void main(String[] args)
{
//Input items for shopping cart
HashMap<String, Double> cart = new HashMap<String, Double>();
//Create a Scanner
Scanner input = new Scanner(System.in).useLocale(Locale.US);
//variables
String item = "";
double price;
boolean done = false;
String ans = ""; //Initialize to empty, just my common practice.
do
{
System.out.print("Enter the item then select enter followed by the price and enter.");
item = input.nextLine();
price = input.nextDouble();
cart.put(item, price);
System.out.print("If done type done if not continue with adding to cart.");
ans = input.nextLine();
if(ans.toLowerCase.equals("done")) //to handle upper and lower case
{
done = true;
}
else
{ //Add curly braces*************
item = input.nextLine();
price = input.nextDouble();
cart.put(item, price);
System.out.print("If done type done if not continue with adding to cart.");
}
}while(!done);
System.out.print("Yo");
}
基本上你需要做的就是闭上牙箍。此外,您可以通过将第一组.next ----()移动到do语句之上,然后让else语句处理.next ---()
来使模块更加模块化。