簡體   English   中英

Java中的對象和ArrayList

[英]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());
        }
    }

}

那是因為facesuit都是static 類的所有實例都共享一個類的所有static字段。 這就是為什么您在值中創建的每個Card()都會被覆蓋,並且最終將最后的值作為KC反映所有實例。 您需要使它們成為實例變量,而不是靜態變量。

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

這樣,每張Card實例將擁有自己單獨的facesuit副本。

附帶說明一下,由於Deck類中的deck列表也是static ,因此將顯示相同的行為。 另外,由於它是靜態的,因此您需要使用ClassName而不是實例進行訪問。 像這樣

for(Card card : Deck.deck){ // access using class name instead of instance

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM