2013-05-03 157 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]; 
     } 
    } 
}