2012-01-18 119 views
2

我想构建一个方法,可以让我找到一个ArrayList中的一些项目的总成本。目前我有一个充满“项目”的数组列表。在商品类中,对象具有由getQuantity和getPrice找到的价格和数量。我试图找出arraylist中所有项目的总成本,但不断收到5个错误。谁能帮助感谢,构建一个Arraylist方法的难度

编辑:发布错误

public double getTotalCost() 
     { 

      double total; 
      for(int i = 0; i < cart.size; i++) // size has private access in ArrayList 
      { 
       total = ((cart.get(i)).getQuantity) * ((cart.get(i)).getPrice) + total; // cannot find symbol // illegal start of type// cannot find symbol // illegal start of type 
      } 


      return total; 
     } 
    } 
+2

为什么getQuantity()和getPrice()等没有右花括号, – kosa

+0

为什么不发布错误消息?我们在阅读你所认识的头脑方面很糟糕。 –

+0

也使用+ =操作符会使这更加可读。再加上,“总”变量没有初始化为0,更不用说对于ArrayList中的“for-each”更可取... –

回答

1

要在对象上调用方法,您总是需要使用括号。所以不是cart.size而是cart.size()。如果你不这样做,Java期望你要求一个对象为public variable。尺寸为您的列表对象的private variable和therfore给你一个私人访问错误

public double getTotalCost(){ 
    double total = 0; 
    for(int i = 0; i < cart.size(); i++){ 
    total = (cart.get(i).getQuantity() * cart.get(i).getPrice()) + total; 
    } 
    return total; 
} 
+0

好的谢谢!它终于编译! – ernies

1

你错过了括号,很多很多。试试这个:

public double getTotalCost() { 
    double total = 0; 
    for (int i = 0; i < cart.size(); i++) { 
     total = cart.get(i).getQuantity() * cart.get(i).getPrice() + total; 
    } 
    return total; 
} 

而且我假设使用泛型,这样的事情是cart宣布:

ArrayList<Item> cart = ... 

外卖的教训:当你调用一个方法在Java中,它会总是有名称后面的括号,即使它没有收到任何参数。

+1

'total'是一个局部变量,所以需要在使用前明确初始化。 – ruakh

+0

@ruakh谢谢,知道了 –

+0

我的实例字段是私有的ArrayList cart; – ernies

0

你可以用size()方法一个ArrayList的大小 - ArrayList中的size场是私有的,但方法是公开的,可改为使用。

另一个错误可能源于试图访问该项目类的getPricegetQuantity领域,而不是getPrice()getQuantity()方法 - 另一个速战速决,只记得括号!

语法上来讲,你也许可以让使用一些不同的语法对自己会更容易一些在你的for循环(尽管这可能会超出你的类了一下):

double total = 0; 
for (Item i : cart) { 
    total += i.getQuantity() * i.getPrice(); 
} 

一些其他提示:你total字段没有被初始化为任何东西(尽管它在上面的例子中)。这对原生类型(int,float,double等等)可以很好地工作,但是它肯定会导致编译器在后期使用非原始类型投诉。如果有疑问,请将它们初始化为原始值为0或null

+0

好的谢谢,我会尝试一下! – ernies

0

不知道为什么每个人都绕过明显的for循环结构来缓解这一点。在这里,我使用CartEntry,将其替换为List中具有getQuantity()和getPrice()方法的任何对象。

double total = 0; 
for(CartEntry entry: cart){ 
    total += entry.getQuantity() * entry.getPrice(); 
} 
return total; 

虽然我在这里。我建议在购物车中的任何对象类型上使用extendedPrice()方法,它可以为您提供数量*价格乘数。