2013-03-04 10 views
5

Po prostu powiedzmy, że mam tablicę int, która może pomieścić 10 liczb. Co oznacza, że ​​mogę przechowywać 0-9 w każdym indeksie (każdy numer tylko jeden raz).java - Jak utworzyć tablicę int z losowo przetasowanymi liczbami w danym zakresie

Jeśli uruchomić poniższy kod:

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

moja tablica będzie wyglądać następująco: [0], [1], ....., [8], [9]

Ale jak losowo przypisać numer przy każdym uruchomieniu kodu? Na przykład, chcę tablica wyglądać mniej więcej tak: [8], [1], [0] ..... [6], [3]

+0

Możliwy duplikat [Losowe tasowania tablicy] (http://stackoverflow.com/questions/1519736/random- shuffling-of-an-array) – leventov

Odpowiedz

10

Złóż mu List<Integer> zamiast tablicy, i użyj Collections.shuffle(), aby go przetasować. Możesz zbudować int [] z Listy po tasowaniu.

Jeśli chcesz bezpośrednio przetasować, wyszukaj "Fisher-Yates Shuffle".

Oto przykład przy użyciu techniki listy:

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

listy mogą przechowywać tylko ciągi znaków? mam rację? – hbb

+1

Lista może przechowywać każdy typ odniesienia, w tym liczbę całkowitą. –

+0

Po wpisaniu num.add (1) na eclipse. Mówi "Metoda add (String) na liście typów nie ma zastosowania dla argumentów (int)". "num" to moja zmienna listy. – hbb

1

Kolekcje klasa ma skutecznego sposobu tasowanie:

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