1.有一个LightBoard类表示二维的灯显示面板,每个灯的状态是打开(true)或关闭(false),用二维布尔型数组lights表示灯的状态。类定义如下,请回答问题:
public class LightBoard {
private boolean[][] lights;
public LightBoard(int numRows, int numColos) {
//方法定义
}
public boolean evaluateLight(int row, int col) {
//方法定义
}
public static void main(String args[]) {
LightBoard sim = new LightBoard(7, 5);
for(int i=0; i<7; i++) {
for(int j=0; j<5; j++)
System.out.print(sim.lights[i][j]+" ");
System.out.println();
}
System.out.println(sim.evaluateLight(0, 3));
System.out.println(sim.evaluateLight(6, 0));
System.out.println(sim.evaluateLight(4, 1));
System.out.println(sim.evaluateLight(5, 4));
}
}
① 构造方法的参数表示灯显示面板的行数和列数。在构造方法中设置每个灯的状态,每个灯按40%的概率设置为打开(true)状态。请把构造方法补充完整。
② evaluateLight方法的参数表示被评估的灯所在的行和列,并按以下规则返回灯的评估值:如果被评估的灯是打开状态,它所在的列中状态为打开的灯的数目是偶数,则返回false;如果被评估的灯是关闭状态,它所在的列中状态为打开的灯的数目是3的倍数,则返回true;其它情况,返回被评估灯的当前状态。请把该方法补充完整。
尝试实现了一下,可以参考一下:
import java.util.Random;
public class LightBoard {
private boolean[][] lights;
public LightBoard(int numRows, int numColos) {
this.lights = new boolean[numRows][numColos];
Random rand = new Random();
for(int i=0;i<numRows;i++){
for(int j=0;j<numColos;j++){
this.lights[i][j] = rand.nextInt(10)<4;
}
}
}
public boolean evaluateLight(int row, int col) {
boolean state = this.lights[row][col];
if(state){
int num = 0;
for(int i=0;i<this.lights.length;i++){
if(this.lights[i][col]){
num++;
}
}
if(num%2==0){
return false;
}
}else{
int num = 0;
for(int i=0;i<this.lights.length;i++){
if(this.lights[i][col]){
num++;
}
}
if(num%3==0){
return true;
}
}
return state;
}
public static void main(String args[]) {
LightBoard sim = new LightBoard(7, 5);
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 5; j++)
System.out.print(sim.lights[i][j] + " ");
System.out.println();
}
System.out.println(sim.evaluateLight(0, 3));
System.out.println(sim.evaluateLight(6, 0));
System.out.println(sim.evaluateLight(4, 1));
System.out.println(sim.evaluateLight(5, 4));
}
}
如有帮助,请采纳!