0

我在填写二维数组的行时遇到问题。我必须在三种颜色之间交替,比如红色,白色和蓝色..

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)开始的每第三行用红色填充。然后对于从 1 到 15 的白色永远行并添加 3 (1, 4, 7, 10, 13) 填充该行。蓝的问题还是有的,但先明白了这一点就可以了。我最终填充了整个红色数组。我需要帮助来修复我的代码,但更重要的是,我需要帮助理解其工作原理的逻辑,任何建议或提示都可以。:(

4

5 回答 5

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

于 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一点也总是正确的。

于 2013-05-03T07:12:50.613 回答
0

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

如果您的数组由奇数行长度组成,则每隔 3 行填充红色,并且仅用于前 15 行。

于 2013-05-03T07:13:02.857 回答
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 回答
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 回答