gpt4 book ai didi

java - Java 中的对象和数组列表

转载 作者:行者123 更新时间:2023-11-29 07:52:05 28 4
gpt4 key购买 nike

对于我正在处理的任务,我想制作一款疯狂的 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];
}



}

我的套牌类(class):

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 反射(reflect)所有实例。您需要将它们设为实例变量,而不是静态变量。

// 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

关于java - Java 中的对象和数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20342785/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com