(Предупреждение - я знаю, что есть вопросы, похожие на этот, но я считаю, что мой другой, так как я хочу хранить костюмы и ранги в разных массивах. Если сообщество считает иначе, я с радостью сниму вопрос.)

Я пытаюсь сгенерировать колоду карт случайным образом (иначе перетасованную). В функции generateCard я генерирую один ранг и одну масть. По сути, он генерирует одну-единственную карту. Я еще не включил никаких возвратов, потому что не знаю, как вернуть обратно два разных значения, тем более, что они имеют разные типы данных. Я действительно хочу сделать это таким образом, и поэтому, если бы ответы могли устоять перед желанием предложить более эффективные или стандартные способы сделать это, я был бы признателен. Я новичок и понимаю, как делать вещи, которые не работают, действительно помогает мне.

Итак, в заключение. У меня вопрос: как мне сначала вернуть два элемента с разными типами данных? А затем, во-вторых, собирать возвраты отдельно и хранить их в двух разных массивах (deckSuitArray и deckRankArray)?

Вот код, который у меня есть:

package texasHoldem;
import java.util.Random;

public class SingleRound{

    public static void main(String[] args) {

        char[] deckSuitArray = new char[51];
        int[] deckRankArray = new int[51];

        for(int i = 0; i < 53; i++){
            generateCard();
            //wish to cycle though arrays storing random cards at different positions
        }
    }
    public static void generateCard(){ //will remove void
    Random ran = new Random();
    char suit = '0';
    int randomRank = ran.nextInt(13)+1;
    System.out.println(randomRank);

    int randomSuit = ran.nextInt(4)+1;

    switch (randomSuit){

    case 1: suit = 'C'; break;
    case 2: suit = 'S'; break;
    case 3: suit = 'D'; break;
    case 4: suit = 'H'; break;

    }
    System.out.println(suit);
    }
}
1
SuperHanz98 8 Сен 2016 в 12:29

2 ответа

Лучший ответ
  1. Java используется для объектно-ориентированного программирования.
  2. Состав полезный.

Ваша карта должна быть классной. Card.java должен выглядеть следующим образом. Добавить метод равенства.

enum Suit {HEART, DIAMONDS, SPADES, CLUBS}
enum Rank {TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE}

public class Card {
    Rank rank;
    Suit suit;
    public Card (Rank r, Suit s) {rank = r; suit = s;} //public constructor
    @Override
    public String toString() {
        return rank.toString() + " " + suit.toString();
    }
}

Затем вы можете сделать Deck.java

public class Deck {

    private List<Card> cards;

    public Deck() {
        cards = new ArrayList<>();
        for (Suit s : Suit.values()) {
            for (Rank r : Rank.values()) {
                cards.add(new Card(r, s));
            }
        }
    }

    public void shuffle() {
        Collections.shuffle(cards);
    }
}

Добавлена ​​перетасовка в класс Deck. Это перемешивание - очень хорошее перемешивание. Он эффективно рандомизирует порядок карт.

4
xenteros 13 Окт 2019 в 09:42

Java может возвращать только одно, поэтому эта опция пропала. Как вы уже сказали, вам не нужен стандартный способ, но оставьте два массива.

Таким образом, был бы другой вариант, просто передать массивы в метод и использовать их в методе и сохранить там материал вместо того, чтобы что-то возвращать.

...
for (int i = 0; i < 53; i++) {
    generateCard(deckSuitArray, deckRankArray);
    // wish to cycle though arrays storing random cards at different
    // positions
}
...
generateCard(char[] deckSuitArray, int[] deckRankArray) {
   ...
   deckSuitArray[someRandomIndex] = suit;
   deckRankArray[someRandomIndex] = randomRank;
   ...
}

Как еще одно примечание, отформатируйте код правильно. Если вы это сделаете, читать будет намного легче.

0
SomeJavaGuy 8 Сен 2016 в 09:41