嵌套循环与程序,布尔数组?

时间:2013-03-12 13:12:42

标签: java loops

在模型类的构造函数中,我需要分配这个布尔数组的内存(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);

5 个答案:

答案 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;)