Java 使用arraylist的总计

Java 使用arraylist的总计,java,Java,我正在学习Java,在其中一个练习中遇到了一个问题 在我正在使用的书中列出。这个练习要求我利用 ArrayLists创建模拟购物车的程序。我有 然而,当我试图把总数加起来时,一切都开始运转了 总计finalPrice,我得到的数字相差很远。任何帮助都会很好 import java.util.ArrayList; import java.util.Scanner; public class Shop1 { public static void main(String[]args) {

我正在学习Java,在其中一个练习中遇到了一个问题 在我正在使用的书中列出。这个练习要求我利用
ArrayList
s创建模拟购物车的程序。我有 然而,当我试图把总数加起来时,一切都开始运转了 总计
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);
    }
}
import java.util.ArrayList;
导入java.util.Scanner;
公共类商店1{
公共静态void main(字符串[]args){
ArrayListcart=new ArrayList();
项目;
字符串itemName;
双倍价格;
整数;
双最终价格=0;
扫描仪扫描=新扫描仪(System.in);
字符串keepShopping=“y”;
做{
System.out.print(“输入项目名称:”);
itemName=scan.next();
系统输出打印(“输入单价:”);
itemPrice=scan.nextDouble();
系统输出打印(“输入数量:”);
数量=scan.nextInt();
//创建新项目并将其添加到购物车
项目=新项目(项目名称、项目价格、数量);
购物车。添加(项目);
对于(int i=0;i
在将购物车中的所有项目相加之前,似乎没有将
最终价格
重置为零。您的代码将在第一次工作,但如果您继续购物,则不会工作。

看起来在将购物车中的所有项目相加之前,您不会将
最终价格重置为零。你的代码第一次就可以工作,但如果你继续购物的话就不行了。

你需要在进入循环之前将最终价格归零,否则它会随着每次迭代呈指数增长

...
finalPrice = 0;
for (int i=0; i<cart.size(); i++)
...
。。。
最终价格=0;

对于(int i=0;i,在进入循环之前,您需要将
finalPrice
归零,否则它将随着每次迭代[多少]呈指数增长

...
finalPrice = 0;
for (int i=0; i<cart.size(); i++)
...
。。。
最终价格=0;

对于(int i=0;i在添加到“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;
}
但是…由于您要在每个项目之后更新最终价格,您不需要在每次添加项目时遍历整个列表。您只需要将最近项目的价格添加到当前总价中,这样您就可以简单地替换

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”变量之前,您没有清除该变量,因此每次添加一个项目时,您都从前面所有项目的“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;
}
但是…由于您要在每个项目之后更新最终价格,您不需要在每次添加项目时遍历整个列表。您只需要将最近项目的价格添加到当前总价中,这样您就可以简单地替换

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;

}

我没有理解你回答的最后一部分的逻辑:整个
for
语句是否缩减到那一行?for循环在do-while循环中。因此每次添加一个新项目时,他都会查看整个列表并将所有项目的价格加起来。这真的没有必要。他真正需要做的就是计算你的价格t最新项目的成本,并将其添加到运行总数中。另一个选项是将整个“for”循环移到“do-while”循环之外,在“while(keepShopping.equals(“y”);”之后,但在“System.out.println”之前(“请支付:$”+最终价格)我没有理解你答案最后一部分的逻辑:整个
for
语句是否缩减到那一行?for循环在do-while循环中。所以每次添加一个新项目时,他都会查看整个列表并将所有项目的价格加起来。这真的没有必要。他真正需要做的只是计算计算出最近项目的成本,并将其添加到运行总额中。另一个选项是将整个“for”循环移到“do-while”循环之外,在“while(keepShopping.equals(“y”);”之后,但在“System.out.println”(“请支付:$”+最终价格);”之前