填充二维数组

时间:2013-05-03 07:04:52

标签: java colors

我遇到填充二维数组行的问题。我必须在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;
            }
        }
    }

ROW = 15
COLUMN = 20

我相信代码意味着对于从0到15(0,3,6,9,12,15)开始的每第三行,用红色填充它。然后对于从1到15开始的白色行,并添加3(1,4,7,10,13)填充行。还有Blue的问题,但是在我第一次理解之后我就能做到这一点。我最终填满了整个阵列Red。我需要帮助来修复我的代码,但更重要的是我需要帮助理解其工作原理的逻辑,任何建议或提示都没问题。 :(

5 个答案:

答案 0 :(得分:0)

如果您设置了ROWS=15然后拨打了(if ROWS%15 ==0),那么每次true都会得到结果,因为ROWS设置为15并且您不会更改迭代循环期间的值。你可能想做这样的事情:

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或用于迭代的任何其他变量的值。

答案 1 :(得分:0)

我的回答只是一个提示,因为这看起来像是我的作业。

您应该更改以下行 -

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

到 -

if (i % 3 == 0)

这确保您只选择可被3整除的行(以及第一行的索引为0,因为您首先检查它)。

您之前的状况是检查ROW % 3。如果您的ROW值为15,则对于每一行都是如此。并且最后i < 15位也始终为真。

答案 2 :(得分:0)

实际上这段代码的作用是:

如果你的数组由奇数行组成,则每隔3行用红色填充,并且只对前15行填充。

答案 3 :(得分: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) 

由于您使用的ROWS始终为15,因此您将全部视为RED

答案 4 :(得分: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];
        }
    }
}