在模型类的构造函数中,我需要分配这个布尔数组的内存(boolean [] [] is_hidden;)。我还需要将它们设置为true,但不知道如何发生这种情况,必须使用嵌套循环,就像底部的paint方法中的那样,以便设置每个元素。
class MineFinderModel {
public static int MINE_SQUARE = 10;
public static int EMPTY_SQUARE = 0;
int num_of_cols;
int num_of_rows;
int[][] the_minefield;
boolean[][] is_hidden;
public MineFinderModel(int n_cols, int n_rows) {
num_of_rows = n_rows;
num_of_cols = n_cols;
the_minefield = new int[num_of_cols][num_of_rows];
is_hidden = new boolean[][];
}
Paint方法示例:
for (int i = 0;i<numCols;i++)
{
for(int j = 0;j<numRows;j++)
{
Rectangle r = getRect(i,j);
g.setColor(Color.black);
g2.draw(r);
if(i==0&&j==0) {
g2.drawOval(x,y,w,h);
g2.fillOval(x,y,w,h);
}
if(i==0&&j==(numRows-1))
g2.fillOval(x,y,w,h);
if(i==(numCols-1)&&j==0)
g2.fillOval(x,y,w,h);
if(i==(numCols-1)&&j==(numRows-1))
g2.fillOval(x,y,w,h);
答案 0 :(得分:1)
您需要使用例如
的大小来定义数组is_hidden = new boolean[cols][rows]();
并迭代,将每个单元格设置为true
(布尔值和布尔数组,默认为false
)。
请注意,Arrays.fill()存在,但只会让你半途而废,因为它不会填充多维数组。您可以使用它,但是您必须遍历行,并在每行上使用Arrays.fill
。在这个例子中也许不值得,但值得注意的是。
答案 1 :(得分:1)
试试这个:
int num_of_cols = 2;
int num_of_rows = 3;
boolean[][] is_hidden;
is_hidden = new boolean [num_of_cols][num_of_rows];
for (int i = 0; i < num_of_cols; i++) {
for (int j = 0; j < num_of_rows; j++) {
is_hidden[i][j] = true;
}
}
您可以看到它现在已正确初始化:
for (boolean[] col : is_hidden) {
for (boolean elem : col) {
System.out.println(elem);
}
}
答案 2 :(得分:1)
定义布尔数组时,默认情况下所有元素的值都为false。 我建议不要循环遍历所有元素,以你可以使用默认false值的方式实现你的条件。
例如
boolean[][] isEnabled = new boolean[10][10];
// code to set all elements to true
if(isEnabled[i][j]){
//some code
}
这可以很容易地替换为
boolean[][] isDisabled = new boolean[10][10];
if(! isDisabled[i][j]){
//some code
}
这样可以节省处理时间,代码看起来很整洁:)。
答案 3 :(得分:0)
只需编写一个嵌套循环。
for (int i = 0;i<n_rows;i++){
for(int j = 0;j<n_cols;j++){
is_hidden[n_rows][n_cols] = true;
}
}
答案 4 :(得分:0)
我有一个简单的解决方案:不使用你的数组is_hidden并用true填充它的每个元素,使用名称isVisible并且根本不填充它,因为它的每个元素已经初始化为false;)