2012-01-18 3 views
2

Я пытаюсь построить метод, который позволит мне найти общую стоимость нескольких элементов в arraylist. В настоящее время у меня есть аррайалист, полный «предметов». В классе предметов объекты имеют цену и количество, найденное getQuantity и getPrice. Я пытаюсь найти общую стоимость всех предметов в arraylist, но все равно получаю 5 ошибок. Может кто-нибудь помочь спасибо,Сложность Построение метода Arraylist

EDIT: Добавлено ошибки

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 было бы более предпочтительным ... –

ответ

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

Вы можете получить размер в ArrayList с size() метода - size поля ArrayList является частным, но этот метод является открытым и может быть используется вместо этого.

Другой ошибка, вероятно, происходит от пытаюсь получить доступ getPrice и getQuantity полого класса элемента, а не getPrice() и getQuantity() методов - еще один быстро исправить, просто помните, скобку!

синтаксически говоря, вы, вероятно, может сделать вещи немного легче на себя, используя некоторый различный синтаксис в ваш цикл (хотя это может быть за пределами вашего класса а бит):

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

Некоторые другие советы: ваша total поле не инициализируется ничем (хотя оно приведено в примере выше). Это может отлично работать с родными типами (ints, float, doubles и т. Д.), Но это, безусловно, вызовет жалобы компилятора позже с не примитивными типами. Если есть сомнения, инициализируйте их для 0 для примитивов или null.

+0

ОК спасибо, я попробую! – ernies

0

Не знаете, почему все обходят очевидную конструкцию цикла, чтобы немного облегчить это. Здесь я использую CartEntry, заменяю его каким бы то ни было объектом в вашем списке, который имеет методы getQuantity() и getPrice().

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

Пока я нахожусь. Я хотел бы предложить метод extendedPrice(), независимо от типа объекта в тележке, который делает для вас умножение количества *.