Customer is #3 from the from the 2006 AP Computer Science A Free Response problems.

https://secure-media.collegeboard.org/apc/_ap06_frq_computer_sc_51649.pdf

Part (a) compareCustomer method

public int compareCustomer(Customer other)
{
    if(getName().equals(other.getName()))
        return getID() - other.getID();

    return getName().compareTo(other.getName());
}

This method behaves nearly identically to the String compareTo method. See compareTo on the AP CS A Exam for additional information. (It also behaves similarly to the compareTo methods in many other classes; however, those are no longer tested on the AP CS A Exam.)

Part (b) prefixMerge method

public static void prefixMerge(Customer[] list1, Customer[] list2, Customer[] result)
{
    int list1Index = 0;
    int list2Index = 0;

    for(int resultIndex = 0; resultIndex < result.length; resultIndex++)
    {
        if(list1[list1Index].compareCustomer(list2[list2Index]) < 0)
        {
            result[resultIndex] = list1[list1Index];
            list1Index++;
        }
        else if(list1[list1Index].compareCustomer(list2[list2Index]) > 0)
        {
            result[resultIndex] = list2[list2Index];
            list2Index++;
        }
        else // duplicate (add one and skip both)
        {
            result[resultIndex] = list1[list1Index];
            list1Index++;
            list2Index++;
        }
    }
}

As mentioned in the question, prefixMerge is a simplified version of the merge method of merge sort. result.length is guaranteed to be <= list1.length and list2.length. This means that it is not necessary to check that list1Index and list2Index are valid in list1 and list2, respectively. Much of the code in merge exists to handle the elements remaining after all necessary comparisons.

2006 AP CS Exam Free Response Solutions

Comments

Comment on Customer