Java 将项添加到ArrayList时出现问题

Java 将项添加到ArrayList时出现问题,java,arraylist,Java,Arraylist,为我12年级的计算机科学课做一个疯狂的八分游戏。我想将牌组类中的一张卡添加到牌组类中。添加卡和删除卡都可以正常工作,但是如何将该卡添加回组类?当尝试做deck.add(卡片)时它不会将卡添加回卡片组阵列列表 以下是我的代码: Game.java: public class game { public static void main(String[] args) { Deck deck = new Deck(); deck.shuffle();

为我12年级的计算机科学课做一个疯狂的八分游戏。我想将
牌组
类中的一张卡添加到
牌组
类中。添加卡和删除卡都可以正常工作,但是如何将该卡添加回
类?当尝试做
deck.add(卡片)时它不会将卡添加回
卡片组
阵列列表

以下是我的代码:

Game.java:

public class game {

    public static void main(String[] args) {
        Deck deck = new Deck();

        deck.shuffle();

        Player player1 = new Player("Chris");
        Player player2 = new Player("Emily");


        for (int i = 0; i < 8; i++) {
            player1.deck.addCard(deck.removeCard());
            player2.deck.addCard(deck.removeCard());
        }

        player1.orderCardsInHandByValue();
        player1.orderCardsInHandBySuit();


        Pile pile = new Pile();

        pile.deck.addCard(deck.removeCard());
        System.out.println("************************");
        System.out.println(pile.getTopCard());

        System.out.println("************************");
        deck.showDeck();

        pile.deck.addCard(deck.removeCard());
        System.out.println("************************");
        System.out.println(pile.getTopCard());
    }

}
Player.java:

class Player {
    private String name = null;

    Deck deck = new Deck();

    public Player(String name) {
        this.name = name;
        this.deck.clear();
    }

    void orderCardsInHandByValue() {
        Card temp = null;
        for (int i = 1; i < 8; i++) {
            for (int j = i; j > 0; j--) {
                if(this.deck.get(j).getValue() < this.deck.get(j - 1).getValue()) {
                    temp = this.deck.get(j);
                    this.deck.set(j, this.deck.get(j - 1));
                    this.deck.set(j - 1, temp);
                }
            }
        }
    }

    void orderCardsInHandBySuit() {
        Card temp = null;
        for(int i = 1; i < 8; i++) {
            for(int j = i; j > 0; j--) {
                if(this.deck.get(j).getSuit().compareTo(this.deck.get(j - 1).getSuit()) < 0) {
                    temp = this.deck.get(j);
                    this.deck.set(j, this.deck.get(j - 1));
                    this.deck.set(j - 1, temp);
                }
            }
        }
    }
}
Deck.java:

class Deck extends ArrayList<Card> {
    private String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
    private String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "1"};

    public Deck() {
        for (int i = 0; i < ranks.length; i++) {
            for (int j = 0; j < suits.length; j++) {
                this.add(new Card(Integer.parseInt(ranks[i]), suits[j]));
            }
        }
    }

    void shuffle() {
        Random random = new Random();
        for (int i = 0; i < 52 - 1; i++) {
            int randomValue = i + random.nextInt(52 - i);
            Card card = this.get(i);
            this.set(i, this.get(randomValue));
            this.set(randomValue, card);
        }
    }

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

    void clearDeck()
    {
        this.clear();
    }

    Card addCard(Card cardToAdd) {
        this.add(cardToAdd);
        return cardToAdd;
    }

    Card removeCard() {
        Card card = (Card) this.get(0);
        this.remove(0);
        return card;
    }
}
类组扩展了ArrayList{
私人字符串[]套装={“俱乐部”、“钻石”、“红心”、“黑桃”};
私有字符串[]排名={“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“1”};
公共甲板(){
for(int i=0;i
我的代码没有很好的设计,主要是因为我必须遵循老师提出的某些要求

class Pile extends Deck {

    Deck deck = new Deck();
而这个

class Deck extends ArrayList<Card> {
输出类似于

Popped 4 of Spades from deck, added to pile
Pile's top card = 4 of Spades
Deck contains...
    10 of Diamonds
    1 of Spades
    // Lots of cards, removed for brevity 
...Deck contains
Pile contains...
    4 of Spades
...Pile contains
Popped 10 of Diamonds from deck, added to pile
Pile's top card = 4 of Spades
Deck contains...
    1 of Spades
    // Lots of cards, removed for brevity 
...Deck contains
Pile contains...
    4 of Spades
    10 of Diamonds
...Pile contains
我最初编写Deck类时没有扩展ArrayList,而是创建了一个私有ArrayList变量。然而,我的老师告诉我按他的方式做,这就是我在这里向你们展示的。甲板建造师,那是我的老师做的,不是我。我不能放弃桩类,因为它是我的老师告诉我必须遵循的设计图的一部分。设计图有五个类。Deck是父类,其次是Pile作为子类。卡牌类和玩家类不会从牌堆或牌堆中扩展/实现/继承任何东西。游戏类是具有主要功能的类


我支持我之前的说法,但既然我们别无选择,因为与陷入困境的老师争论就像与没有技术专长的客户争论一样,我不会扩展
ArrayList
-如果这是您老师的要求,他们是错的,不应该教Galso,您的代码无法编译,
card.face
card
没有
face
方法(或
clear
方法)
deck.add(card)
应该是
deck.addCard(card)
^是避免扩展
ArrayList
的众多原因之一。我忘了删除
void deal()
函数。它现在应该可以正常工作了。我最初编写的
Deck
类没有扩展ArrayList,而是创建了一个私有ArrayList变量。然而,我的老师告诉我按他的方式做,这就是我在这里向你们展示的。
Deck
构造函数,是我的老师做的,不是我。我不能放弃桩类,因为它是我的老师告诉我必须遵循的设计图的一部分。设计图有五个类
Deck
是父类,然后是
Pile
作为子类<代码>卡片
类和
玩家
类不扩展/实现/继承
牌组
中的任何内容<代码>游戏
类是具有主要功能的类。他让我们全班遵守这些离谱的规则。我在为Pile类编写代码时遇到了严重的问题。该项目上周五到期,我班上的每个人都在交let,因为每个人都在努力完成该项目。一旦我使用了
牌堆
类中的那些牌,我如何将它们添加回原始的
牌堆
。此外,
poptocard
函数必须位于
类中。
Pile
类用于从牌组中取出顶牌并将其返回给玩家。一旦我把牌还给玩家,我需要把那张牌放回牌组中,这样我就不会没有牌可玩了。从牌堆中取出牌并把它们放到牌组中(寻找addAll)
class Deck extends ArrayList<Card> {
import java.util.ArrayList;
import java.util.Collections;

public class Game {

    public static void main(String[] args) {
        Deck deck = new Deck();

        deck.shuffle();

        Player player1 = new Player("Chris");
        Player player2 = new Player("Emily");

        for (int i = 0; i < 8; i++) {
            player1.deck.addCard(deck.popToCard());
            player2.deck.addCard(deck.popToCard());
        }

        player1.orderCardsInHandByValue();
        player1.orderCardsInHandBySuit();

        Deck pile = new Deck();
        pile.clearDeck();

        for (int index = 0; index < 2; index++) {
            Card popped = deck.popToCard();
            pile.addCard(popped);
            System.out.println("Popped " + popped + " from deck, added to pile");
            System.out.println("Pile's top card = " + pile.getTopCard());

            System.out.println("Deck contains...");
            deck.showDeck();
            System.out.println("...Deck contains");

            System.out.println("Pile contains...");
            pile.showDeck();
            System.out.println("...Pile contains");
        }
    }

    static class Card {

        private int value = 0;
        private String suit = null;

        public Card(int value, String suit) {
            this.value = value;
            this.suit = suit;
        }

        int getValue() {
            return value;
        }

        String getSuit() {
            return suit;
        }

        public String toString() {
            return (this.getValue() + " of " + this.getSuit());
        }
    }

    static class Player {

        private String name = null;

        Deck deck = new Deck();

        public Player(String name) {
            this.name = name;
            this.deck.clearDeck();
        }

        void orderCardsInHandByValue() {
            Card temp = null;
            for (int i = 1; i < 8; i++) {
                for (int j = i; j > 0; j--) {
                    if (this.deck.get(j).getValue() < this.deck.get(j - 1).getValue()) {
                        temp = this.deck.get(j);
                        this.deck.set(j, this.deck.get(j - 1));
                        this.deck.set(j - 1, temp);
                    }
                }
            }
        }

        void orderCardsInHandBySuit() {
            Card temp = null;
            for (int i = 1; i < 8; i++) {
                for (int j = i; j > 0; j--) {
                    if (this.deck.get(j).getSuit().compareTo(this.deck.get(j - 1).getSuit()) < 0) {
                        temp = this.deck.get(j);
                        this.deck.set(j, this.deck.get(j - 1));
                        this.deck.set(j - 1, temp);
                    }
                }
            }
        }
    }

    static class Deck {

        private String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
        private String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "1"};

        private ArrayList<Card> cards;

        public Deck() {
            cards = new ArrayList<>(52);
            for (int i = 0; i < ranks.length; i++) {
                for (int j = 0; j < suits.length; j++) {
                    cards.add(new Card(Integer.parseInt(ranks[i]), suits[j]));
                }
            }
        }

        void shuffle() {
            Collections.shuffle(cards);
//          Random random = new Random();
//          for (int i = 0; i < 52 - 1; i++) {
//              int randomValue = i + random.nextInt(52 - i);
//              Card card = this.get(i);
//              this.set(i, this.get(randomValue));
//              this.set(randomValue, card);
//          }
        }

        void showDeck() {
            for (Card card : cards) {
                System.out.println("\t" + card);
            }
        }

        void clearDeck() {
            cards.clear();
        }

        Card addCard(Card cardToAdd) {
            cards.add(cardToAdd);
            return cardToAdd;
        }

        Card popToCard() {
            return cards.remove(0);
        }

        public Card get(int index) {
            return cards.get(index);
        }

        public Card getTopCard() {
            return cards.get(0);
        }

        public void set(int index, Card card) {
            cards.set(index, card);
        }
    }

}
Popped 4 of Spades from deck, added to pile
Pile's top card = 4 of Spades
Deck contains...
    10 of Diamonds
    1 of Spades
    // Lots of cards, removed for brevity 
...Deck contains
Pile contains...
    4 of Spades
...Pile contains
Popped 10 of Diamonds from deck, added to pile
Pile's top card = 4 of Spades
Deck contains...
    1 of Spades
    // Lots of cards, removed for brevity 
...Deck contains
Pile contains...
    4 of Spades
    10 of Diamonds
...Pile contains