/ / Java: एक-एक करके, java, सरणियों, यादृच्छिक से यादृच्छिक, गैर-दोहराए जाने वाले तत्वों को पुनः प्राप्त करें

जावा: सरणी एक-एक-एक - जावा, सरणी, यादृच्छिक से यादृच्छिक, गैर-दोहराने वाले तत्वों को पुनर्प्राप्त करें

मेरे पास एक ऐरे है जिसमें पॉइंट्स और एक टाइमर का एक सेट है।

मैं ऐरे से एक यादृच्छिक बिंदु प्राप्त करना चाहता हूंप्रत्येक एक्शन इवेंट को टाइमर से निकाल दिया गया। यहां पकड़ यह है कि मुझे हर Iteration के साथ एक अलग की आवश्यकता है, इसका मतलब है कि मैं दो बार एक ही बिंदु प्राप्त नहीं करना चाहता।

कोई सुझाव?

उत्तर:

जवाब के लिए 0 № 1

आप एक सूची का उपयोग कर सकते हैं, shuffle यह, तो पुनरावृति।

List<Point> pointsList = Arrays.asList(yourArray);
long seed = System.nanoTime();
Collections.shuffle(pointsList, new Random(seed));

जवाब के लिए 0 № 2

आप उपयोग कर सकते हैं Collections.shuffle(List), और आप एक प्राप्त कर सकते हैं List के साथ एक सरणी द्वारा समर्थित Arrays.asList(T...)। कुछ इस तरह,

Integer[] arr = new Integer[] { 1, 2, 3 };
Collections.shuffle(Arrays.asList(arr));
System.out.println(Arrays.toString(arr));

जो ऐरे को प्रदर्शित करेगा arr एक यादृच्छिक क्रम में (गैर-दोहराए जाने वाले तत्वों के साथ)।


जवाब के लिए 0 № 3

इसे फेरबदल करने के तरीके के बावजूद आप सरणी के प्रत्येक सूचकांक के साथ एक सरल सूची भी बना सकते हैं। एक छोटा उदाहरण इस तरह काम कर सकता है:

public static void main(String[] args) {
Integer[] numbers = {1,2,3,4,5,6,7,8,9,10};
List<Integer> list = new ArrayList<Integer>(numbers.length);
for(int i = 0;i<numbers.length;++i) {
list.add(i);
}
}

private static int returnRandomNumber(List<Integer> list) {
Random r = new Random();
if(list.size() == 0) {
return -1; // maybe throw an exception
}
int index = r.nextInt(list.size());
int number = list.get(index);
list.remove(index);
return number;
}