1: public void buy(int sharesBought, double pricePerShare) 2: { 3: StockPurchase purchase = new StockPurchase(sharesBought, pricePerShare); 4: ledger.addToBack(purchase); 5: } // end buy 6: 7: public double sell(int sharesSold, double pricePerShare) 8: { 9: double saleAmount = sharesSold * pricePerShare; 10: double totalCost = 0; 11: 12: while (sharesSold > 0) 13: { 14: StockPurchase transaction = ledger.removeFront(); 15: double shareCost = transaction.getCostPerShare(); 16: int numberOfShares = transaction.getNumberOfShares(); 17: 18: if (numberOfShares > sharesSold) 19: { 20: totalCost = totalCost + sharesSold * shareCost; 21: int numberToPutBack = numberOfShares - sharesSold; 22: StockPurchase leftOver = new StockPurchase(numberToPutBack, shareCost); 23: ledger.addToFront(leftOver); // Return leftover shares 24: // Note: Loop will exit since sharesSold will be <= 0 later 25: } 26: else 27: totalCost = totalCost + numberOfShares * shareCost; 28: 29: sharesSold = sharesSold - numberOfShares; 30: } // end while 31: 32: return saleAmount - totalCost; // Gain or loss 33: } // end sell