0
에서 n-1
까지 정수의 무작위 순열을 효과적으로 찾고 있습니다.
당신은 다음에,
ArrayList
에
n-1
에
0
에서 숫자를 넣어 그 목록에
Collections.shuffle()
를 호출 한 다음 하나를 사용하여 목록 하나에서 숫자를 가져올 수
:
final int n = 4;
final ArrayList<Integer> arr = new ArrayList<Integer>(n);
for (int i = 0; i < n; i++) {
arr.add(i);
}
Collections.shuffle(arr);
for (Integer val : arr) {
System.out.println(val);
}
Collectons.shuffle()
보장되는 모든 변경이 발생하는 것을 균등 우도. 원하는 경우
, 당신은 Iterable
이 점을 캡슐화 수 : 하나의 특정 실행에
ChooseUnique ch = new ChooseUnique(4);
for (int val : ch) {
System.out.println(val);
}
:
public class ChooseUnique implements Iterable<Integer> {
private final ArrayList<Integer> arr;
public ChooseUnique(int n) {
arr = new ArrayList<Integer>(n);
for (int i = 0; i < n; i++) {
arr.add(i);
}
Collections.shuffle(arr);
}
public Iterator iterator() {
return arr.iterator();
}
}
이 클래스의 인스턴스를 반복, 그것은 임의의 순열을 생산 , 이것은 1 0 2 3
를 인쇄했습니다.
출처
2012-03-29 10:53:15
NPE
작성한 코드를 표시하십시오. –
4 자리 숫자 중 4 자리에서 임의의 숫자 4 개 (교체 없음)를 선택하고 있습니까? 당신은 정말로 무엇을 성취하려고합니까? 숫자 0-3의 시퀀스를 임의로 랜덤 화하려고합니까? –
실제로 함수가 전체 프로그램이 아니며 randomise하려고하지 않습니다. 배열에서 요소를 선택하면 다시 선택하지 않습니다. – ray