0

在模型类的构造函数中,我需要分配这个布尔数组的内存(boolean[ ][ ] is_hidden;)。我还需要将它们设置为 true,但不知道这是如何发生的,必须使用嵌套循环,就像底部的绘制方法中的那样,才能设置每个元素。

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[][];
}

绘制方法示例:

                   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);
4

5 回答 5

1

您需要使用大小定义数组,例如

is_hidden = new boolean[cols][rows]();

并遍历,将每个单元格设置为true(布尔值和布尔数组,默认为false)。

请注意Arrays.fill()存在,但只会让你半途而废,因为它不会填充多维数组。您可以使用它,但您必须遍历行,并Arrays.fill在每一行上使用。在此示例中可能不值得,但无论如何都值得注意。

于 2013-03-12T13:16:34.487 回答
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);
        }
    }
于 2013-03-12T13:22:23.457 回答
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
}

您可以通过这种方式节省处理时间,并且代码看起来很整洁:)。

于 2013-03-12T13:38:42.240 回答
0

我有一个简单的解决方案:不要使用数组 is_hidden 并用 true 填充它的每个元素,而是使用名称 isVisible 并且根本不填充它,因为它的每个元素都已初始化为 false ;)

于 2013-03-12T13:34:08.153 回答
0

只需编写一个嵌套循环。

for (int i = 0;i<n_rows;i++){
    for(int j = 0;j<n_cols;j++){
        is_hidden[n_rows][n_cols] = true;
    }
}
于 2013-03-12T13:15:44.350 回答