我遇到填充二维数组行的问题。我必须在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。我需要帮助来修复我的代码,但更重要的是我需要帮助理解其工作原理的逻辑,任何建议或提示都没问题。 :(
答案 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;
}
}
此外 - 如果没有必要,您实际上不应该更改i
,j
或用于迭代的任何其他变量的值。
答案 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];
}
}
}