मेरे पास एक ऐरे है जिसमें पॉइंट्स और एक टाइमर का एक सेट है।
मैं ऐरे से एक यादृच्छिक बिंदु प्राप्त करना चाहता हूंप्रत्येक एक्शन इवेंट को टाइमर से निकाल दिया गया। यहां पकड़ यह है कि मुझे हर 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;
}