gpt4 book ai didi

java - 不小心创建了重复的对象? [Java]

转载 作者:行者123 更新时间:2023-12-01 12:53:14 26 4
gpt4 key购买 nike

我想为扑克牌创建一个类,然后将它们放入 ArrayList 中以在游戏过程中充当你的手牌。不幸的是,每次我尝试画手牌时,用普通的 toString 方法打印时,每张扑克牌看起来都完全相同,尽管它们的花色和值是随机的。这是重要的代码片段,这是 the pastebin of the whole class file (只有 60 行)。谁能告诉我这是怎么回事?如果这是一个重复的问题,我很抱歉,我彻底搜索了。

private static char value;
private static String suit;

private static char [] values = {'A', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'J', 'Q', 'K'};
private static String [] suits = {"Hearts", "Spades", "Clubs", "Diamonds"};

public Card(){
this.value = values[(int)(Math.random()*values.length)];
this.suit = suits[(int)(Math.random()*suits.length)];
}

ArrayList<Card> hand = new ArrayList<Card>();

Card a = new Card();
Card b = new Card();
hand.add(a);
hand.add(b);

for (int i=0; i<hand.size(); i++) {
System.out.println(hand.get(i));
}

最佳答案

问题是 Card 类中的所有变量都是静态static 修饰符意味着变量/方法将是类变量/方法。换句话说,它们每个类仅存在一次,而不是每个实例。

当您创建第一个 Card 实例时,您将 valuesuit 设置为某些值。然后,当您创建第二个实例时,这些值将被覆盖,因为它们每个类仅存在一次。

你能做什么?你可以从变量和方法中删除static修饰符。

关于java - 不小心创建了重复的对象? [Java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24054197/

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