我是Java的新手,我对其中一个概念的理解有困难。
我现在的作业是纸牌游戏战争。当前的指令是让我从一副牌中随机取出一张牌。
我创建了一个数组,但它是一个类Card的数组。这个类基本上通过将一个int和一个String加在一起来创建卡片。然后我从这个类创建了数组。在我看来,我的数组中既没有int也没有String,对吗?
现在我需要从牌组中移除一张随机的卡牌并将其交给玩家。这就是我迷路的地方。我想我可以使用Random删除一张随机的卡,但我似乎总是得到一个错误。
我不是要你帮我做作业,但是如果你能给我指出正确的方向,如果我感到困惑的话,请纠正我。
目前正在学习的课程:
import java.util.Random;
import java.util.*;
public class War3
{
Random ran = new Random();
public FullDeck randomCard()
{
ArrayList <FullDeck> randCard = new ArrayList <FullDeck> (52);
int index = ran.nextInt(randCard.size());
FullDeck x = randCard.remove(index);
return x;
}
public void display()
{
System.out.println("Your card is" + randomCard());
}
}
整个项目的澄清Java -战争游戏-要点
提前感谢。
ArrayList <FullDeck> randCard = new ArrayList <FullDeck> (52);
创建一个ArrayList
。您不需要指定数字52,因为与Array
s相反,ArrayList
s是动态增长的。调用类似于ArrayList <FullDeck> randCard = new ArrayList <FullDeck> ();
,不同之处在于您使用的构造函数将ArrayList
的初始容量设置为52。但这并没有限制ArrayList
的大小。
无论如何,您正在创建一个新的,空的ArrayList
。然后你想要size
,但由于你没有把任何东西放入列表,它仍然是空的,大小为0。然后你试着呼叫ran.nextInt(0)
…nextInt(int n)
期望一个大于零的数字。来自javadoc:
public int nextInt(int n) {
if (n <= 0)
throw new IllegalArgumentException("n must be positive");
我看到两个问题:
- 您正在创建一个
ArrayList
,它可以保存对FullDeck
类的52个实例的引用,但您没有向其添加任何内容。你需要做一些像randCard.add(new FullDeck())
52次/循环**。然后你可能会想要"洗牌",看看这个问题如何做。 - 你的命名有点奇怪…
FullDeck
类实际上似乎应该重命名为Card
,而randCard
变量应该重命名为fullDeck
……在你添加了52张卡片之后。
**编辑:实际上,一副牌的生成将更复杂,以确保你没有任何重复的卡。