Не удается выполнить итерацию, чтобы получить четыре вида

#java #for-loop #iteration

#java #for-цикл #итерация

Вопрос:

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

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

Туз пик, туз бубен, туз червей, туз треф

Количество итераций (счетчик): 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]);
        }
    }

    }
  

Комментарии:

1. Что вы имеете в виду под «установить счетчик»? Например, подсчитайте, сколько раз вам нужно перетасовать колоду, прежде чем из первых четырех выпавших получится четверостишие? (В этом случае вероятность равна (52/52)*(3/51)*(2/50)*(1/49), и ожидаемое значение количества перетасовок также может быть вычислено исходя из этого.)

2. о да, извините, я просто редактировал свой вопрос. Но да, чтобы посчитать, сколько раз потребовалось выполнить итерацию и получить four of a kind

3. В принципе, сколько раз требуется, чтобы получить four of a kind, а также отобразить это на экране. Вопрос был отредактирован, чтобы включить пример

4. Что вы определяете как four of kind? Каждый раз, когда вы перетасовываете, раздаете ли вы первые пять карт? четыре последовательные карты одного вида во всей колоде? Что-то еще?

5. Четверостишие — это как туз пик, туз бубен, туз червей, туз треф

Ответ №1:

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

 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) amp;amp; deck[1].rank.equals(deck[2].rank)
            amp;amp; 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;
    }
}

}
  

Ответ №2:

Пожалуйста, добавьте приведенный ниже код после перемешивания

 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 amp;amp; diamondsCounter == 4 amp;amp; heartsCounter == 4 amp;amp; spadesCounter == 4){
               break;
           }
        }