[英]Objects and ArrayLists in Java
對於我正在從事的作業,我想做一個瘋狂的8s游戲。 我們被指示要做的是創建一個創建新卡的類,然后創建一個將牌添加到卡組的卡組類。 下面是我的代碼。 我的問題是,當我嘗試在卡片組中打印卡片時,它們都顯示為“ KC” =俱樂部之王。 這是我們的頭等艙作業,所以我希望我只是缺少一些基本知識。
我的卡類:
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];
}
}
我的甲板課程:
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());
}
}
}
那是因為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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.