我正在编写一个扑克游戏,并将所有的牌存储在类Deck中创建的数组列表中:
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);
}
}
}
...
我想使用另一个类--Hand--从arraylist中绘制前五个元素,并将它们放入名为myHand的新arraylist中:
public class Hand {
ArrayList<Card> myHand = new ArrayList<Card>();
Deck deckObject = new Deck();
public void Draw(){ //Draws the top 5 cards of the deck and puts them in your hand ArrayList.
for(int i = 0; i <= 4; i++){
myHand.add(deckObject.deck.get(0));
deckObject.deck.remove(0);
}
}
。。。到目前为止一切顺利。当我显示主类的手数组列表时,我得到了一副牌中的前五张牌。然而,当我从deck类显示这副牌时(在调用Draw()方法之后),所有52张牌仍然在那里。
如果我在Hands类中创建一个getDeck()方法并调用它,前五张卡将按预期删除...
所以我似乎在这两个类之间进行了单向通信;当我从手类修改ArrayList时,Deck类不知道它,似乎每个类都保留了一个单独版本的ArrayList。这是怎么回事?
一般来说,您不希望任何人干扰您对象的内部状态。相反,您希望提供允许其他对象与其交互的方法,例如...
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;
}
这样,您可以保护< code >卡片的内部状态,同时提供其他对象与您的< code >卡片组进行交互的能力
这也涉及单个地方内的管理和逻辑,因此它总是相同的。。。
我将在您的<code>手动<code>方法<code>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 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);
}
}
}
然后
Deck deck = new Deck();
Hand hand1 = new Hand(deck);
Hand hand2 = new Hand(deck);
hand1.Draw();
hand2.Draw();
仅供参考
绘制
)。列表
问题内容: 我有一个带有Tag列的表,其中包含大约1000个不同的标签。我想为每个不同的标签创建一个带有列的新表,该列名称将是标签值。使用T- SQL是否有一种简便的方法来做到这一点?SQL Server 2005及更高版本中的任何内容都可以。 这是我的意思的示例: 更新: 我知道限制(在表中的列数上),但是列不会稀疏,并且任何列中都不会有null或0值。 我想要此表的原因是我想针对此新表的列运行
问题内容: 当要依赖的测试与具有此批注的测试属于同一类时,批注的属性可以正常工作。但是,如果要测试的方法和依赖的方法位于不同的类中,则该方法不起作用。示例如下: 有什么办法可以解决这个限制?一种简单的解决方法是在该调用中创建测试。但这将是过多的重复。 问题答案: 将方法放在中并使用。 建议验证*中的配置,并在该处出现问题时抛出错误,以使测试无法运行。这样,测试可以只关注测试。
问题内容: 我试图设置一个不可修改的。 在我的代码中,我有一个返回列表的方法。 此列表不应该修改,但我不想捕获unmodifiableList返回的异常。 它是现有代码,我必须对其进行转换以返回不可修改的列表,但是如果调用了“ add”方法,则不必捕获任何异常。 首先,我创建一个类,该类实现List来覆盖“ add”方法以记录异常而不是捕获异常。 但是我不知道如何正确地实例化它。 问题答案: 如果
问题内容: 我尝试了上面的代码,看是否可以重新分配最终数组的变量[ ans :it可以是]。我知道,通过最终Integer []数组,这意味着我们无法分配除拥有的Integer []之外的另一个实例。我想知道是否有可能使数组变量也不能修改。 问题答案: 据我所知这是不可能的。 但是,有一个Collections.unmodifiableList(..)方法可创建例如的不可修改视图。 如果要保证甚至
为什么这里两个列表的大小都是零?按照我的理解,< code>aList1.size()应该是< code>0,而< code>aList2.size()应该是< code>1。
我想创建一个程序,允许用户删除员工与指定的工资单号码。 java(在其名为的包中) 当我输入工资单号码时,我的程序只识别第一个工作人员。任何其他工作人员都不会被‘发现’。我在哪里出了问题?如何从数组中删除特定的工资单号码并向用户请求另一个输入(直到数组为“空”)。