【问题标题】:Wrong Grocery Items when I add Items to the cart当我将商品添加到购物车时错误的杂货商品
【发布时间】:2015-09-18 09:26:36
【问题描述】:

这是我的课堂作业。我一直在输出中得到错误的杂货。运行代码时我应该如何获取正确的项目?

这是我目前得到的输出:

购物者姓名:Gary


冰淇淋:5 件,每件 4.25 美元 = 21.25 美元

冰淇淋:5 件,每件 4.25 美元 = 21.25 美元

----> 小计 = $42.5

----> 7% 税 = 2.975 美元

---->总计 = $45.475

购物者姓名:Sally


冰淇淋:2 件,每件 4.25 美元 = 8.5 美元

冰淇淋:2 件,每件 4.25 美元 = 8.5 美元

----> 小计 = $17.0

----> 7% 税 = 1.1900000000000002 美元

---->总计 = $18.19


购物车类:

public class Cart
{
public String Name;
public int ItemNum;
public double tax;




public Cart(String ShopperName){
    Name = ShopperName;
}
public String getShopperName(){
    return Name;
}
public int getItemNumber(){
    return ItemNum;
}
public void addItem1(GroceryItem GroceryItem, int NumberItem){
    GroceryItem = GroceryItem;
    ItemNum = NumberItem;
}
public void addItem2(GroceryItem GroceryItem, int NumberItem){
    GroceryItem = GroceryItem;
    ItemNum = NumberItem;
}
public double getItemTotal(){
    double item_total = (double) (GroceryItem.getCost()*getItemNumber());
    return item_total;
}
public double getSubtotal(){
    double subtotal = (double) (getItemTotal() + getItemTotal());
    return subtotal;
}
public double getTaxTotal(){
    double tax = .07;
    double taxtotal = (double) (getSubtotal()*tax);
    return taxtotal;
}
public double getTotal(){
    double Total = (double) (getTaxTotal()+getSubtotal());
    return Total;
}
public void printReceipt(){
    System.out.println("Shopper Name: " + getShopperName());
    System.out.println("----------------------");
    System.out.println(GroceryItem.getName()+":"+ getItemNumber()+ " units at $" + GroceryItem.getCost()+" per unit"+ " = $"+ getItemTotal());
    System.out.println(GroceryItem.getName()+":"+ getItemNumber()+ " units at $" + GroceryItem.getCost()+" per unit"+ " = $"+ getItemTotal());
    System.out.println("----> Subtotal = $" + getSubtotal());
    System.out.println("----> 7% tax = $" + getTaxTotal() );
    System.out.println("---->Total = $" + getTotal());
    System.out.println("");
    System.out.println("");
    System.out.println("");
}
}

驱动类:

/**
 * Driver for Cart and GroceryItem.
 */
public class Driver
{
public static void main(String[] args)
{
    // create grocery items
    GroceryItem item1 = new GroceryItem("milk", 3.39);
    GroceryItem item2 = new GroceryItem("eggs", 1.75);
    GroceryItem item3 = new GroceryItem("ice cream", 4.25);

    // create new carts
    Cart shopper1 = new Cart("Gary");
    Cart shopper2 = new Cart("Sally");


    // add items to first cart 
    shopper1.addItem1(item2, 1);        //1 "eggs" is being added
    shopper1.addItem2(item1, 5);        //5 "milk" are being added

    // add items to second cart
    shopper2.addItem1(item3, 2);        //2 "ice cream" are being added
    shopper2.addItem2(item2, 2);        //2 "eggs" are being added

    // print cart's receipt
    shopper1.printReceipt();
    shopper2.printReceipt(); 

}
}

【问题讨论】:

  • GroceryItem = GroceryItem; GroceryItem 字段的定义缺失。但似乎你一直在覆盖它。
  • 另外,想想你想在这上面编程多长时间。我要购买 934 件商品。所以你要实现934个addItemXXX()方法?

标签: java bluej


【解决方案1】:

这看起来不对:

public void addItem1(GroceryItem GroceryItem, int NumberItem){
    GroceryItem = GroceryItem;
    ItemNum = NumberItem;
}

您正在将 GroceryItem 分配给它自己。

addItem2 方法也是如此。

实际上,您的购物车似乎没有任何存储物品的方法。看起来你没有掌握这里的要点。回到书本上,恐怕……

【讨论】:

    【解决方案2】:

    您在 addItem 方法中将项目分配给自身。声明实例变量并使用this 指定您要分配给实例变量。

    例如:

    public class Cart {
    private GroceryItem groceryItem;
    ...
    
    public void addItem1(GroceryItem groceryItem, int NumberItem){
        this.groceryItem = groceryItem;
        ...
    

    然后在打印结果时,使用实例变量groceryItem

    另外,在java 中,成员(变量/方法名称)应该在lower camel case 中。

    【讨论】:

    • 找不到符号 - 变量 GroceryItem
    • 我已经用实例变量声明更新了答案,但我建议您阅读有关 Java 的更多信息。官方 Java 教程是一个很好的起点。
    • 此示例购物车只有一件商品的空间,添加新商品将替换当前商品。
    猜你喜欢
    • 2016-12-19
    • 1970-01-01
    • 2015-03-31
    • 2018-04-10
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多