2013-12-03 4 views
1

Для выполнения задания Я работаю над созданием сумасшедшей игры 8s. Нам поручено создать класс, который создает новую карту, а затем класс колоды, который добавляет карты в колоду. Ниже мой код. Моя проблема в том, что когда я пытаюсь распечатать карты в колоде, все они отображаются как «KC» = King of Clubs. Это наше первое задание класса, поэтому я надеюсь, что я просто пропустил что-то фундаментальное.Объекты и ArrayLists в Java

My Card Class:

public class Card { 

     static int face; 
     static int suit; 
     static String[] faces = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; 
     static String[] suits = {"H", "D", "S", "C"}; 

     public Card(int face, int suit) { 
      this.face = face; 
      this.suit = suit; 
     } 

     public static String cardString(){ 
      return faces[face - 1] + suits[suit - 1]; 
     } 



    } 

My Deck Класс:

import java.util.List; 
import java.util.ArrayList; 

public class Deck { 

    static List<Card> deck = new ArrayList<Card>(); 

    public Deck() { 
     for (int j = 1; j <= 4; j++){ 
      for (int i = 1; i <= 13; i++){ 
       Card c = new Card(i, j); 
       // System.out.println(c.cardString()); 
       deck.add(c); 
      } 
     } 
    } 

    public static void main(String[] args) { 
     Deck d = new Deck(); 
     for(Card card : d.deck){ 
      System.out.println(card.cardString()); 
     } 
    } 

} 

ответ

5

Это потому, что как face и suit являются static. Все поля static класса разделяются всеми его экземплярами. Вот почему для каждого Card(), который вы создаете в значениях, переопределяются, и в итоге вы получаете последние значения как KC, отражающие все экземпляры. Вам нужно сделать их переменными экземпляра, а не статическими.

// In Card class 
int face; // Instance variable 
int suit; // Instance variable 

Таким образом, каждый экземпляр Card будет свой собственный отдельный экземпляр face и suit.

В качестве примечания стороны, так как список deck в вашем классе Deck также является static, он будет показывать то же поведение. Кроме того, поскольку с его статикой вам нужно получить доступ, используйте ClassName, а не экземпляр. Что-то вроде этого

for(Card card : Deck.deck){ // access using class name instead of instance 
Смежные вопросы