2013-03-04 16 views
5

Fondamentalmente, supponiamo di avere un array int che può contenere 10 numeri. Il che significa che posso memorizzare 0-9 in ciascun indice (ogni numero solo una volta).java - Come posso creare un array int con numeri casualmente mescolati in un determinato intervallo

Se eseguo il codice qui sotto:

int[] num = new int[10]; 
for(int i=0;i<10;i++){ 
    num[i]=i; 
} 

mio allineamento sarebbe simile a questa: [0], [1], ....., [8], [9]

Ma come faccio a randomizzare l'assegnazione del numero ogni volta che eseguo il codice? Ad esempio, voglio la matrice di guardare qualcosa di simile: [8], [1], [0] ..... [6], [3]

+0

Eventuali duplicati di [rimescolamento casuale di un array] (http://stackoverflow.com/questions/1519736/random-shuffling-of-an-array) Gli elenchi – leventov

risposta

10

Fai una List<Integer> invece di un array, e usa Collections.shuffle() per mescolarlo. È possibile creare l'int [] dall'elenco dopo aver mescolato.

Se si desidera eseguire direttamente lo shuffle, cercare "Fisher-Yates Shuffle".

Ecco un esempio di utilizzo della tecnica di listino:

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

public class Test { 
    public static void main(String args[]) { 
    List<Integer> dataList = new ArrayList<Integer>(); 
    for (int i = 0; i < 10; i++) { 
     dataList.add(i); 
    } 
    Collections.shuffle(dataList); 
    int[] num = new int[dataList.size()]; 
    for (int i = 0; i < dataList.size(); i++) { 
     num[i] = dataList.get(i); 
    } 

    for (int i = 0; i < num.length; i++) { 
     System.out.println(num[i]); 
    } 
    } 
} 
+0

possono memorizzare solo stringhe? ho ragione? – hbb

+1

Un elenco può memorizzare qualsiasi tipo di riferimento, incluso intero. –

+0

Quando ho digitato num.add (1) su eclipse. Dice "Il metodo add (String) nel tipo List non è applicabile per gli argomenti (int)". 'num' è la mia variabile di lista. – hbb

1

Collezioni classe ha un metodo efficiente per rimescolamento:

private static Random random; 

/** 
* Code from method java.util.Collections.shuffle(); 
*/ 
public static void shuffle(int[] array) { 
    if (random == null) random = new Random(); 
    int count = array.length; 
    for (int i = count; i > 1; i--) { 
     swap(array, i - 1, random.nextInt(i)); 
    } 
} 

private static void swap(int[] array, int i, int j) { 
    int temp = array[i]; 
    array[i] = array[j]; 
    array[j] = temp; 
} 
Problemi correlati