// This file contains excerpts from the textbook Concrete // Abstractions: An Introduction to Computer Science Using Scheme, by // Max Hailperin, Barbara Kaiser, and Karl Knight, Copyright (c) 1998 // by the authors. Full text is available for free at // http://www.gustavus.edu/+max/concrete-abstractions.html public class ItemList extends Object { private Item[] itemVector; private int numItems; public ItemList(){ itemVector = new Item[10]; numItems = 0; } public boolean empty(){ return numItems == 0; } public void display(){ for(int index = 0; index < numItems; index = index + 1){ System.out.print(index + 1); System.out.print(") "); itemVector[index].display(); System.out.println(); } System.out.print("Total: "); CompuDuds.displayPrice(totalPrice()); System.out.println(); } public int totalPrice(){ int sum = 0; for(int i = 0; i < numItems; i += 1){ sum += itemVector[i].price(); } return sum; } public void add(Item item){ if(numItems == itemVector.length){ grow(); add(item); } else { itemVector[numItems] = item; numItems++; } } public void delete(Item item){ for(int i = 0; i < numItems; i++){ if(itemVector[i] == item){ for(int j = i + 1; j < numItems; j++){ itemVector[j - 1] = itemVector[j]; } itemVector[numItems - 1] = null; numItems--; return; } } System.err.println ("Error: ItemList delete done with Item not in list."); System.exit(1); } public Item choose(){ if(empty()){ System.err.println("Error: choose done on empty ItemList."); System.exit(1); } System.out.println("Which item?"); display(); return itemVector[CompuDuds.inputIntegerInRange(1, numItems) - 1]; } private void grow(){ Item[] newItemVector = new Item[itemVector.length * 2]; for(int i = 0; i < itemVector.length; i++){ newItemVector[i] = itemVector[i]; } itemVector = newItemVector; } }