2016-03-07 29 views
-1

我想做一個基本的2D魔方3x3,但我遇到了方塊的顏色問題,問題出現在我開始混合導致顏色改變的位置時因此,我不知道如何解決它。我需要幫助來完成我的2D魔方

這是代碼。非常感謝您的幫助和時間。

@Override 
public void actionPerformed(ActionEvent e) { 
    if(e.getSource() == upLeft){ 
     Collections.swap(squaresList, 0, 27); 
     Collections.swap(squaresList, 3, 30); 
     Collections.swap(squaresList, 6, 33); 

     Collections.swap(squaresList, 27, 18); 
     Collections.swap(squaresList, 30, 21); 
     Collections.swap(squaresList, 33, 24); 

     Collections.swap(squaresList, 18, 9); 
     Collections.swap(squaresList, 21, 12); 
     Collections.swap(squaresList, 24, 15); 

     // HERE IS WHERE I THINK THE PROBLEM IS...BUT I CANT SEE PAST THE PROBLEM 
     // I TRIED USING HASHMAP SO EACH SQUARE HAS A UNIQUE CODE FOR ITS COLOR BUT DIDNT WORK OUT... 
     for(int i = 0; i < squaresList.size(); i++){ 
      if(i <= 8){ 
       squaresList.get(i).setBackground(Color.WHITE); 
      }else if(i >= 9 && i <= 17){ 
       squaresList.get(i).setBackground(Color.YELLOW); 
      }else if(i > 17 && i <= 26){ 
       squaresList.get(i).setBackground(Color.BLUE); 
      }else if(i > 26 && i <= 35){ 
       squaresList.get(i).setBackground(Color.RED); 
      }else if(i > 35 && i <= 44){ 
       squaresList.get(i).setBackground(Color.GREEN); 
      }else if(i > 44 && i <= 53){ 
       squaresList.get(i).setBackground(Color.ORANGE); 
      } 
     } 
    } 

    if(e.getSource() == upLeftRight){ 
     Collections.swap(squaresList, 0, 45); 
     Collections.swap(squaresList, 1, 46); 
     Collections.swap(squaresList, 2, 47); 

     Collections.swap(squaresList, 45, 18); 
     Collections.swap(squaresList, 46, 19); 
     Collections.swap(squaresList, 47, 20); 

     Collections.swap(squaresList, 18, 36); 
     Collections.swap(squaresList, 19, 37); 
     Collections.swap(squaresList, 20, 38); 

     // HERE IS WHERE I THINK THE PROBLEM IS...BUT I CANT SEE PAST THE PROBLEM 
     // I TRIED USING HASHMAP SO EACH SQUARE HAS A UNIQUE CODE FOR ITS COLOR BUT DIDNT WORK OUT... 
     for(int i = 0; i < squaresList.size(); i++){ 
      if(i <= 8){ 
       squaresList.get(i).setBackground(Color.WHITE); 
      }else if(i >= 9 && i <= 17){ 
       squaresList.get(i).setBackground(Color.YELLOW); 
      }else if(i > 17 && i <= 26){ 
       squaresList.get(i).setBackground(Color.BLUE); 
      }else if(i > 26 && i <= 35){ 
       squaresList.get(i).setBackground(Color.RED); 
      }else if(i > 35 && i <= 44){ 
       squaresList.get(i).setBackground(Color.GREEN); 
      }else if(i > 44 && i <= 53){ 
       squaresList.get(i).setBackground(Color.ORANGE); 
      } 
     } 
    }   
} 
+5

200行代碼轉儲不是問題。 –

+4

這個錯誤發生在哪裏?您也可以查看[如何創建最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)以改進問題。歡迎來到SO! –

+0

是的,抱歉,我編輯了這篇文章。當我宣佈廣場的顏色時,問題就出現了。僅此運動效果不錯,但混合後它會以不正確的方式改變顏色。謝謝你的鏈接。 –

回答

1

從您所提供的代碼,我假設squareList包含正方形,但沒有顏色值。您的方法存在的問題是,您正在使用Collection.swap()來移動正方形值,但您並未根據原始值分配顏色值,這意味着在交換正方形時顏色不會交換。

考慮下面的例子。假設數字代表你的每個廣場。

Original square list: {1(Black), 2(Blue), 3(Green), 4(Red)}

,你在黑 - 藍 - 綠 - 紅的順序assingning到此列表中。這樣做的結果將顏色按以下順序:

Original colour list: {Black, Blue, Green, Red}

在另一方面,在執行交換後:

After swap, the square list: {3, 1, 2, 4}

但你在同一個給顏色秩序,這將是一次:

After swap, colour list: {Black, Blue, Green, Red}

所以你的S q 3有黑色,1有藍色等,它看起來像顏色不chaning。我提出了兩種處理方法:一種是在數據中保留一個單獨的顏色列表,並在交換正方形時將其交換在一起。並使用顏色列表中的順序分配顏色。

另一種解決方案是爲每個Square創建一個數據結構,該數據結構將具有顏色值。該代碼將是這樣的:

class Square 
{ 
    Color myColour; 

    // ... 
} 

採用這種結構,當你進行交換,你正在做的:

Original square list: {1(Black), 2(Blue), 3(Green), 4(Red)}

After swap, square list: {3(Green), 2(Blue), 1(Black), 4(Red)}

我希望這有助於。

+0

非常感謝!這是有道理的,會盡快嘗試。 –

+0

我很高興聽到這個消息。將問題標記爲已解決,如果有效。 – BrokenBacon

+0

我將問題標記爲已解決。第一個解決方案做到了,也會嘗試另一個解決方案。感謝您的時間。 –