Successors FRQ Solution

The fourth question on the 2017 AP Computer Science Exam tasked you with processing a 2d int matrix and using the values to fill in a 2d matrix with references of an arbitrary class, Position.

Part A

In the first part you were to implement a method called findPosition that went through a 2d array of int values and return a new Position object based on where a value is found.

public static Position findPosition(int num, int[][] intArr) {
    for (int r=0; r<intArr.length; r++) {
        for (int c=0; c<intArr[r].length; c++) {
            if (intArr[r][c] == num) {
                return new Position(r, c);
            }
        }
    }
    return null;
}

In general, if you’re given an array to process on the AP exam you’re going to want to iterate through each value. In this case we need a nested loop to go through rows and columns.

We’ll then compare the value at each cell with the value num we’re looking for. When it’s found we want to create and return a new Position object based on the row and column where num was found.

If we get all the way through intArr then we’ll return null.

Part B

Part B expects you to call the findPosition method that you created in Part A to build a 2d matrix of Position objects.

public static Position[][] getSuccessoryArray(int[][] intArr) {
    Position[][] out = new Position[intArr.length][intArr[0].length];
    for (int r=0; r<intArr.length; r++) {
        for (int c=0; c<intArr[r].length; c++) {
            out[r][c] = findPosition(intArr[r][c] + 1, intArr);
        }
    }
    return out; 

For this we’re going to create a new Position matrix that’s the same size as the source matrix intArr. We’ll return out at the end.

And like Part A we’ve got a 2d array to process so we’ll go through each cell using nested loops.

The problem description tells you that at each element in the matrix you should fill in a Position object matching the row and column where you could find the value that’s one more than the cell you’re at. The PDF from College Board for this problem has a diagram that would help way more than I can do with text.

This site contains affiliate links. If you click an affiliate link and make a purchase we may get a small commission. It doesn't affect the price you pay, but it is something we must disclose.