Suggerisco un'alternativa migliore: usa un semplice array (non un ArrayList) di oggetti di tipo carta da gioco, l'array rappresenta un mazzo
riempi il mazzo con le carte in modo ordinato:
nella posizione 0 l'asso di denari (o un altro seme che ti piace),
nella posizione 1 il 2 di denari...nella posizione 9 il 10 di denari
fai lo stesso con gli altri semi
alla fine hai un mazzo perfettamente ordinato
adesso devi "mischiare" il mazzo:
per "mischiare" 2 carte ti basta generare 2 numeri interi compresi tra 0 e 39 (gli indici dell'array), per esempio la prima volta generi 5 e 30;
scambia gli oggetti puntati da questi indici: in questo modo avrai (per esempio) che all'indice 5 (precedentemente occupato dal 6 di denari) ci metti l'indice 30 (l'asso di bastoni se bastoni è l'ultimo seme); viceversa, all'indice 30 va a finire il 6 di denari.
Se fai un ciclo da un centinaio (o più) di generazioni random di coppie di interi e, ad ogni passo, esegui lo scambio delle carte ai rispettivi indici, alla fine del ciclo avrai un array di carte competamente (pseudo) casuale; in questo modo non è più un problema se verrà generato più volte lo stesso intero pseudocasuale perché ogni volta la carta puntata scambierà la posizione con un'altra carta (d'altra parte è quasi compeltamente impossibile che generi 2 volte di seguito la stessa coppia casuale di interi).
Alla fine di questo procedimento hai una mazzo mischiato come nella realtà.
Cosa si fa dopo nella realtà?
prima si mischia un mazzo e poi le carte vengono distribuite in ordine, ed è quello che fai tu:
dai le carte tre a 3 nello stesso ordine in cui sono nel mazzo mischiato!
per esempio se giochi in 2 dai le carte di indice 0,1,2 al primo giocatore, poi dai le carte di indice 3,4,5 al secondo giocatore
poi metti le 4 carte per terra (indici 6,7,8,9)
a questo punto hai bisogno di una variabile intera che "ricorda" a quale indice sei arrivato:
dopo la prima mano al giocatore-1 dai le carte di indice 10,11,12 e la giocatore 2 quelle di indice 13,14,15
Se fai come ti ho suggerito non avrai più problemi di generazione della stessa carta, eviti l'operazione di eliminazione di carte da un ArrayList e il mazzo mischiato si può anche riusare senza essere per forza creato ordinato.
Come risposta è interessante, ma credo che richieda più tempo sia di esecuzione che di per programmarla.
Comunque non è necessario creare una nuova classe per fare il tutto , anzi secondo me non si deve fare: basta una semplice funzione. Detto questo provo ad abbozzarti due righe di codice perchè mi sembra di capire che non sei particolarmente esperto (nemmeno io).
Codice:
private ArrayList lista =new ArrayList();
private void daiCarteDisordinate(int value){
//l' arrayList deve essere già riempito prima che venga chamata questa funzione
//value indica quante carte devi estrarre random: ovviamente siccome fai cose diverse con ogni carta devi vedere in base al
// programma come darle in maniera compatta
for(int i=0;i<value;i++){
int indice=(int) (new Random().nextDouble())* lista.size();
Object o = lista.get(indice);
// a questo punto o contiene la tua carta, facci quello che vuoi
lista.remove(indice);
}
}
ovviamente il codice può e deve essere adattato in base alle esigenze del programma, ma penso che con quelle 3 righe si risolva facilmente il problema
Inoltre ricordati di specificare nella lista l' oggetto che sono le tue carte (quindi tipo ArrayList<MioOggettoCarta>