如何从其他类修改arraylist?JAVA
我正在编写一个扑克游戏,并将所有卡存储在类组中创建的arraylist中:如何从其他类修改arraylist?JAVA,java,arraylist,Java,Arraylist,我正在编写一个扑克游戏,并将所有卡存储在类组中创建的arraylist中: public class Deck { ArrayList<Card> deck = new ArrayList<Card>(); Deck(){ //Build the deck in order. for(int suit = 1; suit <= 4; suit++){ for(int rank = 1; rank <= 13; rank++){
public class Deck {
ArrayList<Card> deck = new ArrayList<Card>();
Deck(){ //Build the deck in order.
for(int suit = 1; suit <= 4; suit++){
for(int rank = 1; rank <= 13; rank++){
Card card = new Card(rank, suit);
deck.add(card);
}
}
}
公共类甲板{
ArrayList deck=新的ArrayList();
Deck(){//按顺序构建Deck。
对于(int suit=1;suit每个手牌
都有自己的牌组
。您希望在多个手牌中共享一个牌组
我想你想要这样的东西:
public class Hand {
Deck deck;
ArrayList<Card> myHand = new ArrayList<Card>();
Hand(Deck deck) {
this.deck = deck;
}
public void removeCard(Card card) {
deckObject.deck.remove(card);
}
public void Draw() {
for(int i = 0; i <= 4; i++) {
myHand.add(deckObject.deck.get(0));
deckObject.deck.remove(0);
}
}
}
供参考
Java惯例是使用小写方法(例如,Draw
)
在构造函数中初始化变量通常更清晰
声明List myHand
通常是首选,因为它具有更高的抽象级别
我会在你的手上尝试这个方法Draw()
,它应该真正命名为Draw()
一般来说,您不希望其他任何人干扰对象的内部状态。相反,您希望提供允许其他对象与其交互的方法,例如
public class Deck {
private ArrayList<Card> deck = new ArrayList<Card>();
Deck(){ //Build the deck in order.
for(int suit = 1; suit <= 4; suit++){
for(int rank = 1; rank <= 13; rank++){
Card card = new Card(rank, suit);
deck.add(card);
}
}
}
public Card[] draw(int count) {
Card[] cards = new Card[count];
if (count < deck.size()) {
for(int i = 0; i < count; i++){
cards[i] = deckObject.deck.remove(0);
}
} else {
throw new IllegalStateException("Can not with draw " + (count + 1) + " from deck that only has " + deck.size() + " cards");
}
return cards;
}
公共类甲板{
private ArrayList deck=new ArrayList();
Deck(){//按顺序构建Deck。
对于(int suit=1;suit,因为您正在创建一个Deck对象的新实例。您不想这样做。将Deck对象传递到Draw方法中,或生成一个单实例Deck对象。您不显示编排应用程序的主类,但应该在其中创建一个Deck对象,然后根据需要传递它。谢谢!这样做了。有道理,谢谢
Deck deck = new Deck();
Hand hand1 = new Hand(deck);
Hand hand2 = new Hand(deck);
hand1.Draw();
hand2.Draw();
if (deckObject.deck.size() > 0) { // Are there cards in the deck?
myHand.add(deckObject.deck.remove(0)); // add the card removed from
// the deck to the Hand.
} else {
break; // No cards.
}
// deckObject.deck.remove(0); // Already taken care of.
public class Deck {
private ArrayList<Card> deck = new ArrayList<Card>();
Deck(){ //Build the deck in order.
for(int suit = 1; suit <= 4; suit++){
for(int rank = 1; rank <= 13; rank++){
Card card = new Card(rank, suit);
deck.add(card);
}
}
}
public Card[] draw(int count) {
Card[] cards = new Card[count];
if (count < deck.size()) {
for(int i = 0; i < count; i++){
cards[i] = deckObject.deck.remove(0);
}
} else {
throw new IllegalStateException("Can not with draw " + (count + 1) + " from deck that only has " + deck.size() + " cards");
}
return cards;
}