0

Javaでソリティアゲームを書こうとしています。カード オブジェクトを arraylist に追加しようとしていますが、MakeDeck 関数が正しく動作しません。

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");
 }
4

3 に答える 3

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

実際にコンストラクターで逆の方法を実行したい場合は、 valueTempto valuesuitTempto suit、およびstatusTemptoに設定します。status

于 2013-10-21T03:05:36.057 に答える
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;
}
于 2013-10-21T03:06:31.237 に答える