Я пишу игру в покер, и есть все карты, хранящиеся в ArrayList, созданного в классе Deck:Как изменить arraylist из другого класса? Java
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 и поместить их в новый ArrayList под названием myHand:
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);
}
}
. . . Пока все хорошо. Когда я показываю руку ArrayList из основного класса, я получаю первые пять карт в колоде. Однако, когда я показываю колоду из класса Deck (после вызова метода Draw()) все 52 карты все еще существуют.
Если я создаю метод getDeck() в классе руки и назвать его, первые пять карт удаляются, как ожидалось ...
Так что, похоже, как я одностороннюю связь между этими двумя классами; когда я изменяю ArrayList из класса Hand, класс Deck не знает об этом, и кажется, что каждый класс поддерживает отдельную версию ArrayList. Что тут происходит?
Потому что вы создаете новый экземпляр объекта деки. Вы не хотите этого делать.Передайте объект Deck в метод Draw или создайте одноэлементный объект Deck. Вы не показываете свой основной класс, который организует приложение, но вы должны создать там один объект Deck, а затем передать его по мере необходимости. – OldProgrammer