7.4.6. Free Response - CookieOrder B

The following is a free response question from 2010. It was question 1 on the exam. You can see all the free response questions from past exams at https://apstudents.collegeboard.org/courses/ap-computer-science-a/free-response-questions-by-year.

Question 1. An organization raises money by selling boxes of cookies. A cookie order specifies the variety of cookie and the number of boxes ordered. The declaration of the CookieOrder class is shown below.

public class CookieOrder
{
 /** Constructs a new CookieOrder object */
 public CookieOrder(String variety, int numBoxes)
 { /* implementation not shown */ }

 /** @return the variety of cookie being ordered
 */
 public String getVariety()
 { /* implementation not shown */ }

 /** @return the number of boxes being ordered
 */
 public int getNumBoxes()
 { /* implementation not shown */ }

 // There may be instance variables, constructors, and methods that are not shown.
}

The MasterOrder class maintains a list of the cookies to be purchased. The declaration of the MasterOrder class is shown below.

public class MasterOrder
{
 /** The list of all cookie orders */
 private List<CookieOrder> orders;

 /** Constructs a new MasterOrder object */
 public MasterOrder()
 { orders = new ArrayList<CookieOrder>(); }

 /** Adds theOrder to the master order.
 *   @param theOrder the cookie order to add to the master order
 */
 public void addOrder(CookieOrder theOrder)
 { orders.add(theOrder); }

 /** @return the sum of the number of boxes of all of the cookie orders
 */
 public int getTotalBoxes()
 { /* to be implemented in part (a) */ }

 // There may be instance variables, constructors, and methods that are not shown.
}

Part b. The removeVariety method updates the master order by removing all of the cookie orders in which the variety of cookie matches the parameter cookieVar. The master order may contain zero or more cookie orders with the same variety as cookieVar. The method returns the total number of boxes removed from the master order.

For example, consider the following code segment.

MasterOrder goodies = new MasterOrder();
goodies.addOrder(new CookieOrder("Chocolate Chip", 1));
goodies.addOrder(new CookieOrder("Shortbread", 5));
goodies.addOrder(new CookieOrder("Macaroon", 2));
goodies.addOrder(new CookieOrder("Chocolate Chip", 3));

After the code segment has executed, the contents of the master order are as shown in the following table.

../_images/cookieOrderTable.png

The method call goodies.removeVariety("Chocolate Chip") returns 4 because there were two Chocolate Chip cookie orders totaling 4 boxes. The master order is modified as shown below.

../_images/cookieOrderTable2.png

The method call goodies.removeVariety("Brownie") returns 0 and does not change the master order.

7.4.6.1. How to Solve This

  1. How will you keep track of the number of boxes of cookies that were removed?

  2. You will need to check the variety of each cookie order in the list of orders. What type of loop will you use?

  3. How will you handle the fact that you may be removing items from the list as you are processing it? Removing an item will change the length of the list and which item is at which index.

  4. How will you check to see if a certain cookie order’s variety matches the given variety?

  5. How do you remove an item from a list?

7.4.6.2. The Algorithm

        8-19-1: The method removeVariety below contains the correct code for one solution to this problem, but it is mixed up.  Drag the needed code from the left to the right and put them in order with the correct indention so that the code would work correctly.  There may be extra blocks that are not needed in a correct solution.private int removeVariety(String cookieVar) {
    int numBoxesRemoved = 0;
---
    for (int i = this.orders.size() - 1; i >= 0; i--) {
---
    for (int i = 0; i < this.orders.size(); i++) { #paired
---
        String thisOrder = this.orders.get(i);
---
        if(cookieVar.equals(thisOrder.getVariety())) {
---
        if(cookieVar == thisOrder.getVariety()) { #paired
---
            numBoxesRemoved += thisOrder.getNumBoxes();
            this.orders.remove(i);
---
        } // end if
---
    } // end for
---
    return numBoxesRemoved;
---
} // end method
        

7.4.6.3. Solve Part B

Complete the method removeVariety below.

You have attempted of activities on this page