java - 我在 Java 中的 do while 循环有什么问题

标签 java do-while

我正在编写这个程序,但不明白为什么循环不会退出并输出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");
    }
}

最佳答案

问题在于 else block 周围缺少大括号:尽管您已正确缩进该 block ,但缩进并不重要:只有第一行

item = input.nextLine();

被认为是else的一部分;其余的无条件执行。

请注意,只有一处将 done 设置为 true,您可以替换 do/while 循环使用“永远”循环,并使用 break 在中间退出循环:

while (true) {
    ...
    if (ans.equals("Done")) {
        break;
    }
    ...
}

这使得声明 done 变量变得不必要。

关于java - 我在 Java 中的 do while 循环有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25248840/

相关文章:

java - 使用InputStream读取Java进程状态,然后使用OutputStream发送命令提示符

java - OIOSAML : Service endpoint settings issue

c# - 寻找更优雅的 DO WHILE 解决方案

java - 如何使用java API关闭hbase 2.0.0中的WAL?

java - 使用黑莓访问 Oracle 数据库?

java - 我的代码给了我一个 no such element 异常

c - C语言中如何避免空格、回车键或非数字输入? scanf 读取整数值

c - C 中包含三个案例的 Switch 语句。第三个案例运行不正常

带有终止符的 C++ switch case 计算器

c - 带 while 循环的读取命令函数