Java 将项添加到ArrayList时出现问题
为我12年级的计算机科学课做一个疯狂的八分游戏。我想将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();
牌组
类中的一张卡添加到牌组
类中。添加卡和删除卡都可以正常工作,但是如何将该卡添加回组
类?当尝试做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