2013-03-04 6 views
5

Grundsätzlich sagen wir, ich habe ein int-Array, das 10 Zahlen enthalten kann. Was bedeutet, dass ich in jedem Index 0-9 speichern kann (jede Zahl nur einmal).java - Wie erstelle ich ein int-Array mit zufällig gemischten Zahlen in einem gegebenen Bereich

Wenn ich führen Sie den Code unten:

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

meine Array würde wie folgt aussehen: [0], [1], ....., [8], [9]

Aber wie randomize ich die Nummernvergabe jedes Mal, wenn ich den Code ausführen? Zum Beispiel möchte ich das Array etwas wie folgt aussehen: [8], [1], [0] ..... [6], [3]

+0

Möglichen Duplikat [Random Schlurfen eines Arrays] (http://stackoverflow.com/questions/1519736/random-shuffling-of-a-array) – leventov

Antwort

10

machen es zu einem List<Integer> anstelle eines Arrays, Verwenden Sie Collections.shuffle(), um es zu mischen. Sie können das int [] aus der Liste nach dem Mischen erstellen.

Wenn Sie den Shuffle direkt machen möchten, suchen Sie nach "Fisher-Yates Shuffle". Hier

ist ein Beispiel für die Verwendung der Liste Technik:

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

Listen können nur Strings speichern? hab ich recht? – hbb

+1

Eine Liste kann einen beliebigen Referenztyp speichern, einschließlich Integer. –

+0

Als ich num.add (1) auf Eclipse tippte. Es sagt "Die Methode add (String) in der Art Liste ist nicht anwendbar für die Argumente (int)". 'num' ist meine Listenvariable. – hbb

1

Kollektionen Klasse hat ein effizientes Verfahren zum schlurfenden:

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; 
} 
Verwandte Themen