3

我的小学班正在运行,我想运行一个单独的班级来打乱号码,然后将打乱的号码返回到我的小学班。在我的 shuffle 类中,我有 return 语句......但现在我该怎么办?如何在我的主类中使用我的 int 数组的随机顺序?

这是我的洗牌课:

public class Shuffle {
public static int[] getShuffle() {
    int[] cards = new int[52];
    ArrayList<Integer> cards_objs = new ArrayList<Integer>();

    for (int i = 0; i < cards.length; i++) {
        cards_objs.add(i);
    }

    Collections.shuffle(cards_objs);

    for (int i = 0; i < cards.length; i++) {
        cards[i] = cards_objs.get(i);

    }

    return cards;
}

}

我在做纸牌游戏(如果你看不出来);

我想使用这个 shuffle 类来洗牌......但是没有卡出现超过一次。

当我归还卡片时,我如何在我的游戏课中使用它们?例如,如果数组中的第一个数字是 1,那么卡片是梅花 A,如果数字是 2,那么卡片是方块 A。等等......我为没有发布足够的信息而道歉......我是java新手(如你所知)

所有帮助将不胜感激,

-史蒂夫

编辑:我发现我的问题是什么,我认为我没有说清楚我的问题是什么。尽管如此,还是感谢大家的帮助,它给了我关于处理这个项目的不同方法的想法。

4

5 回答 5

3

我认为使用enum你可以Card更好地实现 Game 。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

// This is just sample example  and it is just to show an approach. I had not enough time    to make code perfect but it works fine.
public enum Deck
{
DECK;
enum Rank
{
    DEUCE(2), THREE(3), FOUR(4), FIVE(5), SIX(6),
    SEVEN(7), EIGHT(8), NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);

    Rank(int rank)
    {
        this.rank = rank;
    }

    private final int rank;

}

enum Type
{
    SPADES,
    HEARTS,
    DIAMONDS,
    CLUBS;
}

class Card
{
    private final Rank rank;
    private final Type type;

    Card(Rank rank, Type type)
    {
        this.rank = rank;
        this.type = type;
    }

    @Override
    public String toString()
    {
        return type.name() + rank.name();
    }

}

static List<Deck.Card> cards = new ArrayList<Deck.Card>();
static
{
    for (Rank rank : Deck.Rank.values())
    {
        for (Type type : Deck.Type.values())
        {
            cards.add(DECK.new Card(rank, type));
        }
    }

}

List<Deck.Card> shuffle()
{
    Collections.shuffle(cards);
    System.out.println(cards);
    System.out.println(cards.size());
    return Collections.unmodifiableList(cards);
}

public static void main(String[] args)
{
    DECK.shuffle();
}
}
于 2012-08-27T06:57:43.453 回答
1

我觉得不需要定义单独的类,只需创建一个数字数组列表,将其传递给 Java 的 Colections 类

public static void shuffle(List list)

您的列表将直接洗牌

于 2012-08-27T06:48:49.743 回答
0

要么更改数组顺序,以便可以在主类中迭代数组中的正常顺序,要么从包含所需顺序(索引)的 shuffle 方法返回一个数组,然后按此顺序访问这些数组。

选项 A 是更改主数组的元素,选项 B 是读取数组并确定新顺序,并将顺序作为数组返回,然后访问主数组直到新顺序。

于 2012-08-27T06:48:20.157 回答
0

您可以简单地在主类中有一个方法,您可以在其中进行洗牌并将新的洗牌数字集作为数组返回。

如果您确实想使用另一个类,那么您可以使用该类的实例来执行此操作,然后调用该 reShuffleNumbers(),而 reShuffleNumbers() 将返回您想要的数字数组。

于 2012-08-27T06:48:26.413 回答
0

试试这个 -

public static void shuffleArray(int[] a) {
    int n = a.length;
    Random random = new Random();
    random.nextInt();
    for (int i = 0; i < n; i++) {
      int change = i + random.nextInt(n - i);
      swap(a, i, change);
    }
  }

  private static void swap(int[] a, int i, int change) {
    int helper = a[i];
    a[i] = a[change];
    a[change] = helper;
  }

将数组传递给 shuffleArray() 方法,您将根据位置修改数组元素。

我希望这就是你要找的。

于 2012-08-27T06:51:34.410 回答