java - 使用 arraylist 的总计

标签 java

我正在尝试学习 Java,并在其中一个练习中遇到了问题 列在我正在使用的书中。练习要求我使用 ArrayList 创建一个模拟购物车的程序。我有 一切都正常运行,然而,当我试图把盛大的 总计 finalPrice,我得到的数字相差甚远。任何帮助都会很棒。

import java.util.ArrayList;
import java.util.Scanner;

public class Shop1 {
    public static void main(String[]args) {
        ArrayList < Item > cart = new ArrayList();

        Item item;
        String itemName;
        double itemPrice;
        int quantity;
        double finalPrice = 0;

        Scanner scan = new Scanner(System.in);

        String keepShopping = "y";

        do {
            System.out.print("Enter the name of the item: ");
            itemName = scan.next();

            System.out.print("Enter the unit price: ");
            itemPrice = scan.nextDouble();

            System.out.print("Enter the quantity: ");
            quantity = scan.nextInt();

            // create a new item and add it to the cart
            item = new Item(itemName, itemPrice, quantity);
            cart.add(item);

            for (int i = 0; i < cart.size(); i++) {
                Item temp = cart.get(i);
                System.out.println(temp);
                double subTotal =
                    ((temp.getPrice()) * (temp.getQuantity()));
                finalPrice += subTotal;

            }

            System.out.print("Continue shopping (y/n)? ");
            keepShopping = scan.next();
        } while (keepShopping.equals("y"));

        System.out.println("Please pay: $" + finalPrice);
    }
}

最佳答案

在添加之前您没有清除“finalPrice”变量,因此每次添加一个项目时,您都是从之前所有项目的“finalPrice”开始,然后从那里添加。

finalPrice =0;
for (int i=0; i<cart.size(); i++)
{
    Item temp = cart.get(i);
    System.out.println(temp);
    double subTotal = ((temp.getPrice()) * (temp.getQuantity()));
    finalPrice += subTotal;
}

由于在这种情况下实际上不需要计数器“i”,因此您还可以将代码编写得更简洁...

finalPrice =0;
for (Item temp: cart)
{
    System.out.println(temp);
    double subTotal = ((temp.getPrice()) * (temp.getQuantity()));
    finalPrice += subTotal;
}

但是...因为您是在每个项目之后更新最终价格,所以您不需要在每次添加项目时都遍历整个列表。您只需要将最近商品的价格添加到当前总价中,这样您就可以简单地替换...

for (int i=0; i<cart.size(); i++)
{
    Item temp = cart.get(i);
    System.out.println(temp);
    double subTotal = ((temp.getPrice()) * (temp.getQuantity()));
    finalPrice += subTotal;

}

finalPrice += itemPrice * quantity;

关于java - 使用 arraylist 的总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6352264/

相关文章:

Java 重用套接字

java - AsyncTask 完成后执行操作

java - jsp应用中JPA的正确使用

java - 使用java停止队列监听RabbitMQ

java - 如何使 IntelliJ 自动完成不在 Javadoc 中插入完整路径

java - 我如何动态地制作 printf 语句?

java - TestFX 4 从 ChoiceBox/菜单中选择一个值

java - View 需要 API 级别 17 <TextClock>

java - 可变参数类?

java - 短路 JavaOptional.flatMap()