2013-10-21 57 views
0

我想在java上編寫一個solitiare遊戲。我試圖將卡片對象添加到我的數組列表,但MakeDeck功能無法正常工作。將對象添加到java中的數組列表

public class PileOfCards { 
public ArrayList<Card> pile = new ArrayList<Card>(); 
Card tempo; 

public PileOfCards() { 
    pile = new ArrayList<Card>(); 

} 

public void MakeDeck() { 

    for (int i=0;i<13;i++){ 
     tempo = new Card(i+1, "FaceDown", "Clubs"); 
     pile.add(tempo); 

    } 
    for (int j=0;j<13;j++){ 
     tempo = new Card(j+1, "FaceDown", "Diamonds"); 
     pile.add(tempo); 
} 
    for (int k=0;k<13;k++){ 
     tempo = new Card(k+1, "FaceDown", "Hearts"); 
     pile.add(tempo); 
    } 
    for (int l=0;l<13;l++){ 
     tempo = new Card(l+1, "FaceDown", "Spades"); 
     pile.add(tempo); 
    } 
} 

當我試圖打印值打印「0,null,null」,52次。問題是什麼?它看起來像我無法到達ArrayList,但我不知道爲什麼。

編輯:

卡構造:

public Card(int valueTemp, String suitTemp, String statusTemp) { 
    valueTemp = value; 
    suitTemp = suit; 
    statusTemp = status; 
    } 

打印功能:

public void printPile(){ 
    for(int i=0;i<pile.size();i++){ 
    System.out.print(pile.get(i).status); 
    System.out.print(" "); 
    System.out.print(pile.get(i).suit); 
    System.out.print(" "); 
    System.out.print(pile.get(i).value); 
    System.out.printf("\n"); 
} 
+0

沒有看到,你正在做的打印出來的代碼,我們不能真正幫助你。我有一些關於什麼是錯誤的理論,但首先,請添加不適用於原始文章的代碼。 –

+0

您的打印聲明是什麼樣的?你可以提供'Card'的構造函數嗎? –

+0

只是一個評論,說a)你不需要每個循環都有一個新的變量,b)如果你要爲循環變量添加1,那麼爲什麼不做'for (int i = 1; i <= 13; i ++)...' –

回答

5

的問題是在你的Card構造;作業是錯誤的方式。

你想

public Card(int valueTemp, String suitTemp, String statusTemp) { 
    value = valueTemp; 
    suit = suitTemp; 
    status = statusTemp; 
} 

其他的方式不設置等於參數字段,它設置等於域的參數。具體來說,你

public Card(int valueTemp, String suitTemp, String statusTemp) { 
    valueTemp = value; 
    suitTemp = suit; 
    statusTemp = status; 
} 

valueTemp之前不得不valuesuitTempsuit,並statusTempstatus,當你真正想要做周圍的其他方式在構造函數。

+0

^我注意到這個以及 – EyeOfTheHawks

+0

謝謝你,解決了我的問題。 – kndmrl

2
public Card(int valueTemp, String suitTemp, String statusTemp) { 
    valueTemp = value; 
    suitTemp = suit; 
    statusTemp = status; 
} 

所有這些任務都回到前面。你正在分配的參數,而不是他們。習慣上這樣寫:

public Card(int value, String suit, String status) { 
    this.value = value; 
    this.suit = suit; 
    this.status = status; 
} 
+1

解決了我的問題,謝謝。 – kndmrl

1

作業是向後的。

lValue = rValue;

lValue是你想要設置的東西,而rValue是你希望它成爲的數據。

當你這樣做:

public Card(int valueTemp, String suitTemp, String statusTemp) { 
    valueTemp = value; 
    suitTemp = suit; 
    statusTemp = status; 
} 

你改變你作爲參數傳遞到任何valuesuitstatus是參數valueTempsuitTempstatusTemp

爲了解決這個問題,前後翻頁你分配,像這樣的價值觀:

public Card(int valueTemp, String suitTemp, String statusTemp) { 
    value = valueTemp; 
    suit = suitTemp; 
    status = statusTemp; 
}