3

プライマリ クラスを実行していて、別のクラスを実行して数字をシャッフルし、シャッフルした数字をプライマリ クラスに返したいと考えていました。私のシャッフル クラスには 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;
}

}

私はカードゲームを作っています(わからない場合);

カードがシャッフルされるように、このシャッフル クラスを使用したかったのですが、カードが複数回表示されることはありません。

カードを返却したら、ゲーム クラスでどのように使用しますか? たとえば、配列の最初の数字が 1 の場合、カードはクラブのエースであり、数字が 2 の場合、カードはダイヤのエースです。など...十分な情報を投稿できなかったことをお詫びします...私はJavaが初めてです(おわかりのように)

すべての助けは大歓迎です、

-スティーブ

編集:私は自分の問題が何であるかを知りました。自分の質問が何であるかを十分に明確にしたとは思いません。それにもかかわらず、このプロジェクトにアプローチするためのさまざまな方法についてのアイデアを私に与えてくれました。

4

5 に答える 5

3

あなたを使用すると、より良い方法でゲームをenum実装できると思います。Card

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

メインクラスの配列で通常の順序を反復できるように配列の順序を変更するか、必要な順序(インデックス)を含む配列をシャッフルメソッドから返し、この順序までこれらにアクセスします。

オプション A は、メイン配列の要素のローダーを変更することです。オプション B は、配列を読み取って新しい順序を決定し、順序を ana ray backt として返し、新しい順序までメイン配列にアクセスすることです。

于 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 に答える