2013-05-03 115 views
0

我遇到了填充我的二维数组的行的问题。我有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)来填充该行。仍然有蓝色的问题,但我可以做到这一点后,我首先了解这一点。我最终填补了整个阵列红色。我需要帮助来修复我的代码,但更重要的是,我需要帮助理解这是如何工作的逻辑,任何建议或提示都可以。 :(

回答

0

我的回答是公正的。一个提示,因为这个厕所ks像我的功课。

你应该更改以下行 -

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

到 -

if (i % 3 == 0) 

这可以确保您只选择是由3(也是第一排索引整除行0,因为你正在检查它)。

您之前的状况正在检查ROW % 3。如果您的ROW值是15,那么对于每一行都是如此。最后的i < 15位也总是如此。

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值或任何其他变量,如果它没有必要需要

0

其实这段代码的含义是:

如果你的阵列由奇数行的长度那么它满足每一第三排有红色,仅在第15行。

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,所以您可以像红色一样使用

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]; 
     } 
    } 
}