我正在尝试学习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;