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(booleansおよびboolean array、デフォルトは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

ネストされたループを作成するだけです。

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 に答える
0

簡単な解決策があります: 配列 is_hidden を使用してその各要素を true で埋める代わりに、名前 isVisible を使用し、そのすべての要素が既に false に初期化されているため、まったく埋めないでください;)

于 2013-03-12T13:34:08.153 に答える