Como Embaralhar Array de 52 cartas e dividir em dois , classe de jogo(DOMINÒ DE BARALHO)

5 respostas
V

exemplo assim

class List {

public static void main (String args[]){

String list [] = new String [4];

list[0]=a;

list[1]=b;

list[2]=c;

list[3]=d;

}}

Como faço para embaralhar esses elementos sem repetiçao e dividir em dois arrays diferente?

5 Respostas

T

Para embaralhar, use o algoritmo que está no fonte da classe java.util.Collections, método shuffle. Você pode olhar esse fonte no arquivo src.jar (ou src.zip) que normalmente vem com o JDK; basta abrir o arquivo java\util\Collections.java que fica dentro desse jar ou zip.
Para dividir em dois, isso fica com você, porque basta criar 2 arrays de 26 posições, e copiar as primeiras 26 posições para o primeiro array, e as últimas para o segundo array (por exemplo).

V

poderia me mostrar um exemplo de como ficaria um programa que embaralha pelo método shuffle?
já tentei fazer um programa desta forma mas não consegui compilar!
sou muito iniciante…
:oops:

Dieval_Guizelini

Demonstrando o que o thingol te disse:

public class Card {
    public enum Rank { DEUCE, THREE, FOUR, FIVE, SIX,
        SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE }

    public enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES }

    private final Rank rank;
    private final Suit suit;
    private Card(Rank rank, Suit suit) {
        this.rank = rank;
        this.suit = suit;
    }

    public Rank rank() { return rank; }
    public Suit suit() { return suit; }
    public String toString() { return rank + " of " + suit; }

    private static final List<Card> protoDeck = new ArrayList<Card>();

    // Initialize prototype deck
    static {
        for (Suit suit : Suit.values())
            for (Rank rank : Rank.values())
                protoDeck.add(new Card(rank, suit));
    }

    public static ArrayList<Card> newDeck() {
        return java.util.Collections.shuffle( new ArrayList<Card>(protoDeck) );
    }
}

fw

Ps: fonte do programa: [url]http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html[/url], apenas inclui o método shuffle.

Dieval_Guizelini
<blockquote><div class="quote-author">viniciusdospassos:</div>exemplo assim

class List {

public static void main (String args[]){

String list [] = new String [4];

list[0]=“a”;

list[1]=“b”;

list[2]=“c”;

list[3]=“d”;

}}

Como faço para embaralhar esses elementos sem repetiçao e dividir em dois arrays diferente?</blockquote>

Ou se preferir:

String[] list = new String[] { "a","b","c","d" }; java.util.List<String> lista = java.util.Arrays.asList(list); java.util.Collections.shuffle(lista); String[] vetor = lista.toArray(list); for(String s: vetor) { System.out.println(s); }

fw

Dieval_Guizelini

Como o nosso amigo está ainda com a dúvida de dividir em dois conjuntos:

int metade = (int)Math.floor( ((double)vetor.length)/2d ); String[] jogadorA = new String[metade]; String[] jogadorB = new String[metade]; for(int i=0 ; i<metade ; i++) { jogadorA[i] = vetor[i]; jogadorB[i] = vetor[i+metade]; }

ou

String[] jogadorA = java.util.Arrays.copyOfRange(vetor, 0, metade-1); String[] jogadorB = java.util.Arrays.copyOfRange(vetor, metade, vetor.length-1);

tem outras possibilidades, como usar 2i para o jogador A e 2i+1 para B…

fw

Criado 2 de junho de 2008
Ultima resposta 2 de jun. de 2008
Respostas 5
Participantes 3