Java - 战争游戏 - 从数组中获取对象

时间:2014-03-29 14:56:45

标签: java arrays arraylist

我是Java新手,我无法理解其中一个概念。

我目前正在进行的任务是纸牌游戏“战争”。目前的说明是我从一副牌中删除随机卡。

我创建了一个数组,但它是一个类Card的数组。该类通过基本上将int和String一起添加来创建卡。然后我从该类创建了数组。在我看来,我的数组中既没有int也没有String,这是正确的吗?

现在我需要从牌组中移除一张随机牌并将其交给玩家。这是我迷路的地方。我想我可以使用随机删除随机卡,但我似乎总是得到一个错误。

我不是要求你为我做任务,但如果你愿意,请指出我正确的方向,如果我感到困惑可能会纠正我。

我目前正在上课:

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 - War Game - Gist

非常感谢提前。

2 个答案:

答案 0 :(得分:0)

我看到两个问题:

  1. 您正在创建一个ArrayList,可以持有FullDeck类的52个实例的引用,但您不会向其中添加任何内容。你需要在循环中执行randCard.add(new FullDeck()) 52次/次**。那么你很可能想要&#34; shuffle&#34;在甲板上,请参阅this question了解如何做到这一点。
  2. 您的命名有点奇怪......实际上FullDeck类似乎应该重命名为Card,并且randCard变量应该重命名在你添加了52张卡之后,fullDeck之类的东西......
  3. **编辑:实际上,为了确保你没有任何重复的牌,一副牌的生成会更加复杂。

答案 1 :(得分:0)

ArrayList <FullDeck> randCard = new ArrayList <FullDeck> (52);

这会创建一个ArrayList。您不需要指定数字52,因为ArrayList是动态增长的,而不是Array。这个电话类似于 ArrayList <FullDeck> randCard = new ArrayList <FullDeck> ();,不同之处在于您使用的构造函数将ArrayList初始容量设置为52.这绝不会限制ArrayList的大小

无论如何,您正在创建一个新的空ArrayList。然后你想要size,但由于你没有把任何东西放到列表中,它仍然是空的,大小为零。然后,您尝试拨打ran.nextInt(0) ... nextInt(int n)预计数字大于零。来自javadoc:

public int nextInt(int n) {
 if (n <= 0)
  throw new IllegalArgumentException("n must be positive");