2014-09-05 3 views
0

Мне нужно написать программу, которая использует два класса для создания списка продуктов. Первый класс создает массив для хранения значений, полученных из второго класса. В массиве хранятся элементы бакалеи, которые имеют имя, количество и цену. У меня есть функция, которая должна получить общую стоимость всего в массиве, но по какой-то причине функция только добавляет последний элемент, который добавляется к массиву самому себе. Вот мой код:Не удалось добавить элементы из массива

public class GroceryList { 

private GroceryItemOrder[] groceryList = new GroceryItemOrder[0]; 
private int numofEntries; 

public GroceryList() 
{ 
    this.groceryList = new GroceryItemOrder[10]; 
    this.numofEntries = 0; 
} 

public void add(GroceryItemOrder item) 
{ 
    if(numofEntries == 10) 
    { 
     System.out.println("The list is full."); 
    } 
    else 
    { 
     groceryList[numofEntries] = item; 
     numofEntries++; 
    } 

} 

public double getTotalCost() 
{ 
    double totalCost = 0; 
    double newCost = 0; 

    for(int size = 0; size < numofEntries; size ++) 
    { 
     newCost = groceryList[size].getCost(); 
     totalCost = newCost + totalCost; 
    } 

    return totalCost; 


} 



public class GroceryItemOrder { 

private static double pricePerUnit; 
private static int quantity; 
private String name; 

public GroceryItemOrder(String name, int quantity, double pricePerUnit) 
{ 
    this.name = name; 
    this.quantity = quantity; 
    this.pricePerUnit = pricePerUnit; 
} 


public static double getCost() 
{ 
    return (quantity * pricePerUnit); 
} 

public void setQuantity(int quantity) 
{ 
    this.quantity = quantity; 
} 


public static void main(String[] args) 
{ 
    GroceryList newList = new GroceryList(); 

    newList.add(new GroceryItemOrder("cookies", 1, 1.50)); 
    newList.add(new GroceryItemOrder("cheese", 2, 1.0)); 
    newList.add(new GroceryItemOrder("bread", 1, 5.0)); 

    System.out.println(newList.getTotalCost()); 

} 
} 

В функции я пытался использовать цикл, который будет запускать через массив из одного элемента в то время, и принимать любые значения были сохранены в элемент и сохранить его в новый объект. Я чувствую, что я направляюсь в правильном направлении, но не могу понять, где проблема с функцией. Может ли кто-нибудь увидеть, где моя проблема, или, по крайней мере, дать мне несколько советов о том, как я могу попытаться исправить проблему?

ответ

0

2 из ваших 3 переменных в GroceryItemOrder: static, что означает только одну переменную для всего класса, а не по одному для каждого экземпляра. Каждый новый экземпляр перезаписывает значения, установленные ранее созданным экземпляром.

Сделать все эти переменные экземпляра не static:

private double pricePerUnit; 
private int quantity; 
private String name; 
+0

Спасибо! Изменяя те из статики и функции getCost() из статической фиксированной моей проблемы. – Christina

0

Статический модификатор до quantity и pricePerUnit не имеет смысла, если вы хотите иметь какой-либо разновидности в своем продуктовом магазине. Случается, что каждый раз, когда вы вызываете конструктор или GroceryItemOrder, вы изменяете эти два статических поля, поэтому, если влияет на общую стоимость всех предыдущих созданных заказов. Остальное отлично, даже если оно может быть более кратким.