Lightboard Solution

A matrix question usually shows up on the AP Computer Science exam, and in 2019 the last question had that matrix.

What you were give was a matrix of boolean values which represent lights on or off on a rectangular board. true represents a light that’s on and false is a light that’s off.

The LightBoard class has an instance variable boolean[][] lights that holds the boolean values. You’ll be working with this instance variable in both methods to implement.

Constructor

Like most AP FRQs the constructor asks you to set the instance variables. In this case we need to create the matrix and randomly fill it with true and false values so that each cell has a 40% probability of being true.

public LightBoard(int numRows, int numCols) {
    lights = new boolean[numRows][numCols];
    for (int r=0; r<numRows; r++) {
        for (int c=0; c<numCols; c++) {
            lights[r][c] = Math.random() < 0.4;
    }
}

The first line instantiates and sizes lights to numRows rows and numCols columns. Going off of previous problems, I assume that many students forgot this line. If it’s not there lights would be null.

Next the code iterates through each cell in the matrix and uses Math.random to take care of the 40% probability. Remember that Math.random() returns a number in the range 0.0 to 1.0, exclusive of 1.0. So it should return something < 0.4 40% of the time.

evaluateLight

Part B asks you to evaluation a light based on these conditions.

  • If the light is on and there are an even number of lights in that column, return false.
  • If the light is off and there are a multiple of 3 lights on in that column, return true.
  • If neither condition, return the value of the light.
public boolean evaluateLight(int row, int col) {
    int onInCol = 0;
    for (int r=0; r<lights.length; r++) {
        if (lights[r][col]) {
            onInCol++;
        }
    }
    if (lights[row][col] && onInCol % 2 == 0) {
        return false;
    } else if (!lights[row][col] && onInCol % 3 == 0) {
        return true;
    } else {
        return lights[row][col];
    }
}

Since we’ll need the number of on lights in col several times it’s best to go ahead and calculate that first. I did that and stored it in the onInCol variable.

With that we can now build a set of if statements that takes care of returning the right value based on the conditions above.

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.