【发布时间】:2013-12-22 19:08:48
【问题描述】:
我正在制作一个卡片和一副卡片类,它制作一副 52 张卡片,而 cardProgram 类是驱动程序。卡片类具有卡片花色的属性和价值的属性(Ace,King,10,9 , 等等)。它还有一个用于属性的构造函数和一个用于卡片的 toString 表示。卡片组类有一个属性来表示卡片组中的卡片,并且没有参数的构造函数将创建 52 张卡片并将它们添加到卡片组,随机删除卡片并返回已绘制卡片对象的方法,以及 toString 到显示包含在套牌中的卡片。 Tha main 将创建纸牌。用户输入他们想要绘制的数字。他们抽出的每张牌都会被打印出来,然后牌组中剩余的牌也会被打印出来。我正在使用 ArrayList 来执行此操作,我只想知道我是否朝着正确的方向前进。我不断收到错误,我知道我的课程有问题。我以前从未使用过 ArrayList,所以任何信息都将不胜感激
public class Card
{
private int type, value;
private String[] cardType = {"Clubs", "Spades", "Diamonds", "Hearts"};
private String[] cardValue = {"Ace", "King", "Queen", "Jack", "10",
"9", "8", "7", "6", "5", "4", "3", "2"};
public Card(int types, int values)
{
type = types;
value = values;
//this.value = value;
}
public String toString()
{
String finalCard = cardValue[value] + " of " + cardType[type];
return finalCard;
}
}
import java.util.Random;
import java.util.ArrayList;
public class Deck
{
private ArrayList<Card> cards;
public Deck()
{
for(int a =0; a<=3; a++)
{
for(int b =0; b<=12;b++)
{
cards.add(drawRandomCard());
}
cards.addAll(cards);
}
}
public Card drawRandomCard()
{
Random generator = new Random();
int index = generator.nextInt(cards.size());
return cards.remove(index);
}
public String toString()
{
String result = "Cards remaining in deck: " + cards;
return result;
}
}
import java.util.Scanner;
public class CardProgram
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
Card C;
Deck deck = new Deck();
System.out.println("Enter number of cards to be dealt: ");
int numberCards = scan.nextInt();
System.out.println("Cards drawn: ");
C = deck.drawRandomCard();
System.out.println(C.toString());
}
}
【问题讨论】:
-
嗯,什么样的错误?
-
您遇到了什么错误?请具体,并编辑您的问题以包含堆栈跟踪/错误消息
-
欢迎来到 stackoverflow.com。我是否正确,您没有具体问题,但只想知道您的代码是否可以改进?在这种情况下,您应该将其发布在我们的合作伙伴网站 codereview.stackexchange.com 上。
-
cards.addAll(cards);你知道你在这里添加了卡片列表吗? (这意味着您复制了列表中的所有条目) -
@knoight "这意味着如果指定的集合是这个列表,并且这个列表是非空的,那么这个调用的行为是未定义的。)" 确实。它可能会复制列表,也可能会陷入无限循环,试图一遍又一遍地添加最后一个元素。
标签: java arrays object arraylist