2013-03-04 37 views
5

Về cơ bản, giả sử tôi có một mảng int có thể chứa 10 số. Điều đó có nghĩa là tôi có thể lưu trữ 0-9 trong mỗi chỉ mục. (Mỗi số chỉ một lần).java - Làm thế nào để tạo một mảng int với các số ngẫu nhiên xáo trộn trong một phạm vi nhất định

Nếu tôi chạy vào mã bên dưới:

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

mảng của tôi sẽ trông như thế này: [0], [1], ....., [8], [9]

Nhưng làm cách nào để phân ngẫu nhiên việc gán số mỗi khi tôi chạy mã? Ví dụ: tôi muốn mảng trông giống như sau: [8], [1], [0] ..... [6], [3]

+0

có thể trùng lặp của [xáo trộn ngẫu nhiên của một mảng] (http://stackoverflow.com/questions/1519736/random-shuffling-of-an-array) – leventov

Trả lời

10

Làm cho nó là List<Integer> thay vì mảng, và sử dụng Collections.shuffle() để trộn nó. Bạn có thể tạo int [] từ Danh sách sau khi xáo trộn.

Nếu bạn thực sự muốn thực hiện ngẫu nhiên trực tiếp, hãy tìm kiếm "Fisher-Yates Shuffle".

Dưới đây là một ví dụ của việc sử dụng Danh mục kỹ thuật:

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

danh sách chỉ có thể lưu trữ Strings? Tôi có đúng không? – hbb

+1

Danh sách có thể lưu trữ bất kỳ loại tham chiếu nào, bao gồm cả số nguyên. –

+0

Khi tôi gõ num.add (1) vào nhật thực. Nó nói "Phương thức thêm (String) trong danh sách kiểu không áp dụng cho các đối số (int)". 'num' là biến danh sách của tôi. – hbb

1

Collections lớp có một phương pháp hiệu quả cho shuffling:

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; 
} 
Các vấn đề liên quan