2013-08-27 23 views
6

Ho difficoltà a provare a creare un metodo "shuffleDeck()".Come "shuffle" un array?

Quello che sto cercando di fare è creare un metodo che utilizzi un parametro dell'array (che sarà il mazzo di carte) mischiare le carte e restituire l'elenco di matrici shuffled.

Questo è il codice:

class Card 
{ 
    int value; 
    String suit; 
    String name; 

    public String toString() 
    { 
     return (name + " of " + suit); 
    } 
} 

public class PickACard 
{ 
    public static void main(String[] args) 
    { 
     Card[] deck = buildDeck(); 
     // display Deck(deck); 

     int chosen = (int)(Math.random()* deck.length); 
     Card picked = deck[chosen]; 

     System.out.println("You picked a " + picked + " out of the deck."); 
     System.out.println("In Blackjack your card is worth " + picked.value + " points."); 

    } 

    public static Card[] buildDeck() 
    { 
     String[] suits = {"clubs", "diamonds", "hearts", "spades" }; 
     String[] names = {"ZERO", "ONE", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "Jack", "Queen", "King", "Ace" }; 

     int i = 0; 
     Card[] deck = new Card[52]; 

     for (String s: suits) 
     { 
      for (int v = 2; v<=14; v++) 
      { 
       Card c = new Card(); 
       c.suit = s; 
       c.name = names[v]; 
       if (v == 14) 
        c.value = 11; 
       else if (v>10) 
        c.value = 10; 
       else 
        c.value = v; 

       deck[i] = c; 
       i++; 
      } 
     } 
     return deck; 
    } 

    public static String[] shuffleDeck(Card[] deck) 
    { 
     /** I have attempted to get two index numbers, and swap them. 
     I tried to figure out how to loop this so it kind of simulates "shuffling". 
     */ 
    } 

    public static void displayDeck(Card[] deck) 
    { 
     for (Card c: deck) 
     { 
      System.out.println(c.value + "\t" + c); 
     } 
    } 
} 
+4

Converti l'array in un 'Elenco' e chiama' Collections.shuffle (list) '. –

+0

Sì, è così! – LastFreeNickname

+1

Il codice che hai postato non ha senso perché manca la parte più importante - la tua implementazione shuffle tentata. Ho votato per chiudere perché non sembra che tu abbia mai tentato di farlo. –

risposta

10

ne dite:

List<Card> list = Arrays.asList(deck); 
Collections.shuffle(list); 
+0

Che dire della 'Carta []'? –

+1

Ma ti sei perso il risultato in one-liner: quale variabile contiene contenuti mescolati? ;) – UR6LAD

+0

Mi sbagliavo: Arrays.asList crea un elenco basato su array, quindi quando Raccolte sostituisce qualsiasi elemento in questo elenco è lo stesso di come lo scambia in array. – UR6LAD

0

Se questo è per un progetto scolastico (come penso che sia), si potrebbe non essere consentito di utilizzare funzioni built-in, come Collezioni :: shuffle(). Se questo è il caso, allora devi provare a simulare la casualità (che in programmazione può essere sorprendentemente difficile).

Il modo più comune per creare un senso di casualità è utilizzare uno RNG (random number generator). Come ha detto

ho cercato di ottenere due numeri di indice, e scambiarlo.

Corretto. Un modo per mescolare è scegliere una carta alla volta e selezionare a caso un'altra carta con cui scambiare la posizione.

  • Sai che il mazzo ha sempre 52 carte.
  • Hai un generatore casuale per selezionare un indice casuale.
  • Si dispone di un linguaggio di programmazione con le strutture di loop .

Con questi strumenti è possibile implementare la propria funzione shuffle abbastanza facilmente.

2

Un modo è quello di convertire l'array a un elenco, e utilizzare java.util.Collections.shuffle(array) per rimescolalo:

Card[] deck = ...; 
List<Card> list = Arrays.asList(deck); 
Collections.shuffle(list); 

Se ancora bisogno di un array invece di una lista, è possibile aggiungere:

list.toArray(deck); 

Here is a TIO (Try-it-online) link to see the array to list conversion and shuffling in action.

Codice della TIO copiato sotto come riferimento codice:

import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

class M{ 
    public static void main(String[] a){ 
    // Original array 
    Integer[] array = new Integer[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
    System.out.println("before: " + Arrays.toString(array)); 

    // Convert array to list 
    List<Integer> list = Arrays.asList(array); 
    // And shuffle that list 
    Collections.shuffle(list); 
    System.out.println("after as list: " + list); 

    // (Optional) then convert the list back to an array, 
    // and save it in its initial variable (`array` in this case) 
    list.toArray(array); 
    System.out.println("after as array: " + Arrays.toString(array)); 
    } 
}