Невозможно сделать итерацию, чтобы получить четыре вида - PullRequest
0 голосов
/ 12 марта 2019

Я занимался этим дольше всего.Я не мог получить ответ.До сих пор моя программа печатает колоду карт, включая масти и ранги, но я должен перетасовать карты, установить счетчик и перебирать перемешанную карту, чтобы получить четыре карты.

Пример вывода:

Туз пик, Туз алмазов, Туз червей, Туз треф

Количество итераций (счетчик): 32562

public class Deck {
    public static void main(String[] args) {
        String[] SUITS = {
            "Clubs", "Diamonds", "Hearts", "Spades"
        };

        String[] RANKS = {
                "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "Jack", "Queen", "King"
        };

        // initialize deck
        int n = 52;
        String[] deck = new String[n];
        for (int i = 0; i < RANKS.length; i++) {
            for (int j = 0; j < SUITS.length; j++) {
                deck[SUITS.length * i + j] = RANKS[i] + " of " + SUITS[j];
            }
        }

        // shuffle
        for (int i = 0; i < n; i++) {
            int r = i + (int) (Math.random() * (n-i));
            String temp = deck[r];
            deck[r] = deck[i];
            deck[i] = temp;
        }



        // print shuffled deck
        for (int i = 0; i < n; i++) {
            System.out.println(deck[i]);
        }
    }

    }

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Пожалуйста, добавьте следующий код после случайного воспроизведения

int clubCounter=0;
        int diamondsCounter=0;
        int heartsCounter=0;
        int spadesCounter=0;
        for (int i = 0; i < n; i++) {
            if(deck[i].endsWith("Clubs")){
                clubCounter+=1;
                if(clubCounter == 4){
                    System.out.println("Number of iteration to get 4 clubs: "+i);
                }
            }else if(deck[i].endsWith("Diamonds")){
                diamondsCounter+=1;
                if(diamondsCounter == 4){
                    System.out.println("Number of iteration to get 4 Diamonds: "+i);
                }
            }else if(deck[i].endsWith("Hearts")){
                heartsCounter+=1;
                if(heartsCounter == 4){
                    System.out.println("Number of iteration to get 4 Hearts: "+i);
                }
            }else{
                spadesCounter+=1;
                if(spadesCounter == 4){
                    System.out.println("Number of iteration to get 4 Spades: "+i);
                }
            }
           if(clubCounter == 4 && diamondsCounter == 4 && heartsCounter == 4 && spadesCounter == 4){
               break;
           }
        }   
0 голосов
/ 12 марта 2019

Я включил жетон и перемешал, пока первые четыре карты не стали четырьмя:

public class Deck {
public static void main(String[] args) {
    Card[] deck = initDeck();

    int counter = 0;
    do {
        shuffle(deck);
        counter++;
    } while (!isFourOfAKind(deck));

    System.out.print(deck[0] + ", ");
    System.out.print(deck[1] + ", ");
    System.out.print(deck[2] + ", ");
    System.out.println(deck[3]);
    System.out.println();
    System.out.println("Number of iterations (counter): " + counter);

    // print shuffled deck
    System.out.println("All of the deck");
    for (int i = 0; i < deck.length; i++) {
        System.out.println(deck[i]);
    }
}

private static Card[] initDeck() {
    String[] SUITS = { "Clubs", "Diamonds", "Hearts", "Spades" };
    String[] RANKS = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };

    int n = 52;
    Card[] deck = new Card[n];
    for (int i = 0; i < RANKS.length; i++) {
        for (int j = 0; j < SUITS.length; j++) {
            deck[SUITS.length * i + j] = new Card(SUITS[j], RANKS[i]);
        }
    }
    return deck;
}

private static boolean isFourOfAKind(Card[] deck) {
    return deck[0].rank.equals(deck[1].rank) && deck[1].rank.equals(deck[2].rank)
            && deck[2].rank.equals(deck[3].rank);
}

private static void shuffle(Card[] deck) {
    for (int i = 0; i < deck.length; i++) {
        int r = i + (int) (Math.random() * (deck.length - i));
        Card temp = deck[r];
        deck[r] = deck[i];
        deck[i] = temp;
    }
}

public static class Card {
    public final String suit;
    public final String rank;

    public Card(String suit, String rank) {
        super();
        this.suit = suit;
        this.rank = rank;
    }

    @Override
    public String toString() {
        return rank + " of " + suit;
    }
}

}
...