The NumberCube problem from the 2009 AP Computer Science Exam is typical of free response problems that test arrays.

NumberCube is #1 from the 2009 AP Computer Science Free Response.

Part (a) getCubeTosses method

public static int[] getCubeTosses(NumberCube cube, int numTosses)
    int[] tosses = new int[numTosses];

    for (int i = 0; i < tosses.length; i++)
        tosses[i] = cube.toss();

    return tosses;

Part (b) getLongestRun method

public static int getLongestRun(int[] values)
    int inARow = 1;
    int maxInARow = 1;
    int startOfMaxInARow = -1;

    for (int i = values.length - 2; i >= 0; i--)
        if (values[i] == values[i + 1])
            if(inARow > maxInARow)
                maxInARow = inARow;
                startOfMaxInARow = i;
            inARow = 1;

    return startOfMaxInARow;

inARow stores the the number of visited consecutive occurrences of values[i]. i starts at values.length - 2 (skips the last element). inARow starts at 1 to account for the skipped element. inARow is reset to 1 at the end of each run to account for the value at i.

maxInARow stores the highest known number of consecutive occurrences of a value. maxInARow starts at 1 for the same reason inARow starts at 1.

startOfMaxInARow stores the starting index of the longest known run of occurrences of a value, or -1 if no run is known. A run must have a length >= 2. If maxInARow stores 1, as it is does initially, no run has yet been identified.

The loop runs backwards to avoiding needing to calculate the starting position of the longest run so far. The loop skips the last element so the conditional statement can access values[i + 1].

This is a variation of find the minimum or maximum. maxInARow starts at 1 since the loop skips an element. The length of each run is compared against the length of the longest known run.

Additional resources

2009 AP CS Exam Free Response Solutions

Help & comments

Get help from AP CS Tutor Brandon Horn

Comment on NumberCube