A matrix question usually shows up on the AP Computer Science exam, and this year the last free response question had that matrix.

What you were given 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;
}
```

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 evaluate a light based on these conditions.

- If the light is on and there are an even number of lights on 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;
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.