7

「shuffleDeck()」メソッドを作成しようとして苦労しています。

私がやろうとしているのは、配列パラメーター (カードのデッキになります) を受け取り、カードをシャッフルし、シャッフルされた配列リストを返すメソッドを作成することです。

これはコードです:

class Card
{
    int value;
    String suit;
    String name;

    public String toString()
    {
        return (name + " of " + suit);
    }
}

public class PickACard
{
    public static void main( String[] args)
    {   
        Card[] deck = buildDeck();
        // display Deck(deck); 

        int chosen = (int)(Math.random()* deck.length);
        Card picked = deck[chosen];

        System.out.println("You picked a " + picked + " out of the deck.");
        System.out.println("In Blackjack your card is worth " + picked.value + " points.");

    }

    public static Card[] buildDeck()
    {
        String[] suits = {"clubs", "diamonds", "hearts", "spades" };
        String[] names = {"ZERO", "ONE", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "Jack", "Queen", "King", "Ace" };

        int i = 0;
        Card[] deck = new Card[52];

        for ( String s: suits )
        {   
            for ( int v = 2; v<=14; v++)
            {
                Card c = new Card();
                c.suit = s;
                c.name = names[v];
                if ( v == 14)
                    c.value = 11;
                else if ( v>10)
                    c.value = 10;
                else
                    c.value = v; 

                deck[i] = c;
                i++;
            }
        }
        return deck; 
    }

    public static String[] shuffleDeck( Card[] deck) 
    {
        /** I have attempted to get two index numbers, and swap them. 
        I tried to figure out how to loop this so it kind of simulates "shuffling". 
        */
    }

    public static void displayDeck( Card[] deck)
    {
        for ( Card c: deck) 
        {   
            System.out.println(c.value + "\t" + c);
        }
    }
}
4

4 に答える 4

0

これが学校のプロジェクト用である場合 (私はそうだと思います)、Collections::shuffle() などの組み込み関数を使用することは許可されていない可能性があります。この場合、ランダム性をシミュレートする必要があります (プログラミングでは、これは驚くほど難しい場合があります)。

ランダム感を生み出す最も一般的な方法は、RNG (乱数発生器)を使用することです。あなたが言ったように

2 つのインデックス番号を取得して、それらを交換しようとしました。

正しい。シャッフルする 1 つの方法は、一度に 1 枚のカードを選び、別のカードをランダムに選んで位置を入れ替えることです。

  • デッキには常に 52 枚のカードがあります。
  • ランダム インデックスを選択するためのランダム ジェネレーターがあります。
  • ループ構造を持つプログラミング言語があります。

これらのツールを使用すると、独自のシャッフル関数を非常に簡単に実装できます。

于 2013-08-27T16:07:16.870 に答える