public class GroceryItem
{
// instance variables
private String name;
private double cost; // could be float or int (if in cents)
// Could also have quantity
// (e.g., you might have 1 "item" object for 5 apples).
// Constructor
public GroceryItem(String itemName, double itemCost)
{
this.name = itemName;
this.cost = itemCost;
}
// Observer methods (one for each instance variable)
public String getName()
{
return this.name;
}
public double getCost()
{
return this.cost;
}
// Should also have getQuantity if you have a quantity instance variable.
}
public class GroceryList
{
// instance variables
private ArrayList<GroceryItem> cart;
// Constructor
public GroceryList()
{
this.cart = new ArrayList<GroceryItem>();
}
// Methods
public void addItem(GroceryItem item) // Add item to the cart
{
this.cart.add(item);
}
public void printList() // Print items, one per line
{
for ( GroceryItem item: this.cart )
{
System.out.println(item.getName() + ": " + item.getCost());
}
/* OR
for ( int i = 0; i < this.cart.size(); i++ )
{
GroceryItem item = this.cart.get(i);
System.out.println(item.getName() + ": " + item.getCost());
}
*/
}
public int numItems()
{
return this.cart.size();
}
public int totalCost() // Cost of buying all items in cart
{
double total = 0.0;
for ( GroceryItem item: this.cart )
{
total = total + item.getCost(); // OR total += item.getCost();
}
/* OR
for ( int i = 0; i < this.cart.size(); i++ )
{
GroceryItem item = this.cart.get(i);
total = total + item.getCost();
}
*/
}
public String cheapestItem() // Returns name of cheapest item in list
{
if ( this.cart.isEmpty() == true )
return "";
// Assume the first item is the cheapest.
GroceryItem cheapest = this.cart.get(0);
// Look through all others to see if any are cheaper.
for ( GroceryItem item: this.cart )
{
if ( item.getCost() < cheapest.getCost() )
cheapest = item;
}
return cheapest.getName();
/* OR
// Assume the first item is the cheapest.
int cheapIndex = 0;
// Starting at the 2nd item, see if any others are cheaper.
for ( int i = 1; i < this.cart.size(); i++ )
{
GroceryItem item = this.cart.get(i);
if ( item.getCost() < this.cart.get(cheapIndex).getCost() )
cheapIndex = i;
}
return this.cart.get(cheapIndex).getName();
*/
}
public int indexOfPriciestItem()
{
if ( this.cart.isEmpty() == true )
return -1;
// Assume the first item is the priciest.
int priceyIndex = 0;
// Starting at the 2nd item, see if any others are pricier.
for ( int i = 1; i < this.cart.size(); i++ )
{
GroceryItem item = this.cart.get(i);
if ( item.getCost() > this.cart.get(priceyIndex).getCost() )
priceyIndex = i;
}
return priceyIndex;
}
/** Prints number of items in list, cheapest item, most expensive item
* (and its price), and the total cost of all the items.
*/
public void printSummaryStats()
{
System.out.println("Number of items in list: " + this.numItems());
GroceryItem cheapest = this.cart.get(this.cheapestItem);
GroceryItem priciest = this.cart.get(this.indexOfPriciestItem());
System.out.println("Cheapest item is: " + cheapest.getName());
System.out.println("Priciest item is: " +
priciest.getName() + " (" + priciest.getCost() + ")");
System.out.println("Total cost of all items is: " + this.totalCost());
}
// Additional methods one could write:
// - A method that returns the index of the alphbetically first item
// - A method that returns the index of the alphbetically first item
// starting from a certain point, e.g.,
// alphaFirst(0) returns the first from the whole list
// alphaFirst(5) returns the first from the range (5 .. n-1)
// - A method that swaps two items in the list, e.g.,
// swap(0, 5) swaps the items at indices 0 and 5
// - A method that finds the alphbetically first item in a range
// (i .. n-1) and moves that item to the beginning of the range, e.g.,
// sortHelper(5) finds the alphabetically smallest item
// from index 5 to the end of the list and
// rearranges that part of the list in some
// way so that the smallest item will be at
// index 5.
// - A method that sorts the items in the grocery list alphabetically.
}