0

2 次元配列の行を埋める際に問題が発生しています。赤、白、青などの 3 色を交互に使用する必要があります。

public void makePattern()
{
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLUMNS; j++) {
            if (ROWS%3 == 0 && i < 15) {
                colors[i][j] = Color.RED;
                i = i + 3;
            }
            else if (ROWS%2 == 1 && i < 15) {
                i = 1;  
                colors[i][j] = Color.WHITE;
                i = i + 3;
            }
        }
    }

行 = 15
列 = 20

このコードは、0 から 15 (0、3、6、9、12、15) までの 3 行ごとに赤で塗りつぶすことを意味していると思います。次に、1 から 15 までの白い永遠の行に 3 (1、4、7、10、13) を追加して行を埋めます。ブルーの件はまだあるけど、そこを先に理解してからやればいい。最終的に、配列全体を赤で塗りつぶします。コードを修正するには助けが必要ですが、さらに重要なのは、これがどのように機能するかのロジックを理解する助けが必要です。アドバイスやヒントは何でも構いません。:(

4

5 に答える 5

0

これは機能するはずです (認めますが、まだテストしていません)。より多くの色をサポートするために簡単に拡張できます。

private Color[] colors= {Color.RED, Color.WHITE};

public void makePattern()
{
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLUMNS; j++) {
           colors[i][j] = colors[(ROWS * i + j) % colors.length];
        }
    }
}
于 2013-05-03T07:16:01.077 に答える
0

を設定ROWS=15してから呼び出すと、が 15 に設定されており、ループの反復中にその値を変更しないため、結果として(if ROWS%15 ==0)毎回取得されます。あなたはおそらく次のようなことをしたいと思うでしょう:trueROWS

public void makePattern()
{
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLUMNS; j++) {
            if ((i*j)%3 == 0 && i < 15) {
                colors[i][j] = Color.RED;
            }
            else if ((i*j)%2 == 1 && i < 15) {
                colors[i][j] = Color.WHITE;
            }
            else Colors[i][j] = Color.BLUE;
        }
    }

さらに、 の値ijまたは反復に使用するその他の変数は、必要でない限り変更しないでください。

于 2013-05-03T07:11:25.083 に答える
0

これは宿題のように見えるので、私の答えは単なるヒントです。

次の行を変更する必要があります -

if (ROWS%3 == 0 && i < 15)

に -

if (i % 3 == 0)

これにより、3 で割り切れる行のみを選択していることを確認します (最初にチェックしているため、インデックス 0 の最初の行も選択します)。

以前の条件は をチェックしていましROW % 3た。ROW 値が 15 の場合、これはすべての行に当てはまります。そして、最後のi < 15ビットも常に true です。

于 2013-05-03T07:12:50.613 に答える
0

行を変更する

if (ROWS%3 == 0 && i < 15) 

if (i%3 == 0 && i < 15) 

また、この行

else if (ROWS%2 == 1 && i < 15) 

else if (i%2 == 1 && i < 15) 

常に 15 の ROWS で操作しているため、すべてが RED になります。

于 2013-05-03T07:15:08.533 に答える