আমি একটি সংখ্যার অ্যারে থেকে এলোমেলোভাবে সংখ্যা বাছাইয়ের সমাধান খুঁজছি।
উদাহরণস্বরূপ আমার একটি অ্যারে রয়েছে new int[]{1,2,3}, আমি এলোমেলোভাবে কীভাবে একটি নম্বর বাছতে পারি?
উত্তর:
public static int getRandom(int[] array) {
int rnd = new Random().nextInt(array.length);
return array[rnd];
}
generatorএকটি দৃষ্টান্ত হলjava.util.Random
Random()আপনি যখন প্রতিটি ফাংশনটি চালাবেন আমি তৈরি করব না : এলোমেলো জেনারেটরের ইতিহাস থাকার কথা। যদি এটি না থাকে তবে এটি অত্যন্ত অনুমানযোগ্য। এটি array[(int)(System.currentTimeMillis() % array.length)]এক্ষেত্রে মোটেও সমস্যা নয় - তবে এটি উল্লেখ করা উচিত যা প্রস্তাবিত সমাধানের মতোই দুর্দান্ত।
new Random()পূর্বে তৈরির চেয়ে আলাদা বীজ রয়েছে এমন একটি দৃষ্টান্ত তৈরি করার চেষ্টা করে Random। আপনার পদ্ধতির অল্প সময়ের মধ্যে দু'বার ফাংশনটি শুরু করে মারাত্মকভাবে ভেঙে যায়।
gcd(array.length,clockAccuracy)!=1
আপনি র্যান্ডম জেনারেটরটি এলোমেলো সূচী তৈরি করতে এবং সেই সূচকটিতে উপাদানটি ফিরে আসতে পারেন:
//initialization
Random generator = new Random();
int randomIndex = generator.nextInt(myArray.length);
return myArray[randomIndex];
আপনি যদি একাধিকবার এলোমেলো উপাদান পেতে চলেছেন তবে আপনি নিশ্চিত করতে চান যে আপনার এলোমেলো নম্বর জেনারেটর একবার মাত্র আরম্ভ করা হয়েছে।
import java.util.Random;
public class RandArray {
private int[] items = new int[]{1,2,3};
private Random rand = new Random();
public int getRandArrayElement(){
return items[rand.nextInt(items.length)];
}
}
যদি আপনি এলোমেলোভাবে অ্যারে উপাদানগুলি বেছে নিয়ে থাকেন যা অপ্রত্যাশিত হওয়া প্রয়োজন, আপনার ব্যবহার করা উচিত জাভা.সিকিউরিটি ecসিকিউর র্যান্ডম বদলে এলোমেলো। এটি নিশ্চিত করে যে কেউ যদি শেষ কয়েকটি বাছাই জানেন তবে তাদের পরেরটি অনুমান করার কোনও সুবিধা থাকবে না।
আপনি একটি অবজেক্ট অ্যারের জেনেরিক্স ব্যবহার থেকে একটি র্যান্ডম সংখ্যা বাছাই করতে খুঁজছি হয়, আপনি (সূত্র লোকের ফলে জন্য একটি পদ্ধতি সংজ্ঞায়িত করতে পারে অবিনাশ আর মধ্যে স্ট্রিং অ্যারে থেকে এলোমেলো উপাদান ):
import java.util.Random;
public class RandArray {
private static Random rand = new Random();
private static <T> T randomFrom(T... items) {
return items[rand.nextInt(items.length)];
}
}
java.util.Random0 এবং অ্যারের দৈর্ঘ্যের মধ্যে একটি এলোমেলো সংখ্যা তৈরি করতে ব্যবহার করুন: random_numberএবং তারপরে পূর্ণসংখ্যা পেতে এলোমেলো নম্বরটি ব্যবহার করুন:array[random_number]
আপনি ব্যবহার করতে পারেন
public static int getRandom(int[] array) {
int rnd = (int)(Math.random()*array.length);
return array[rnd];
}
Math.random()একটি ফেরৎ doubleমধ্যে 0.0করার জন্য (সহ) 1.0(বাদ দেওয়া)
এর সাথে গুণিত করা array.lengthআপনাকে (সমেত) এবং (একচেটিয়া) doubleমধ্যে একটি দেয়0.0array.length
কাস্ট করা intআপনাকে 0(সমেত) এবং array.length-1(সমেত) এর মধ্যে পূর্ণসংখ্যা প্রদান করবে
যেহেতু আপনার জাভা 8 রয়েছে, অন্য একটি সমাধান হ'ল স্ট্রিম এপিআই ব্যবহার করা।
new Random().ints(1, 500).limit(500).forEach(p -> System.out.println(list[p]));
যেখানে 1সর্বনিম্ন অন্তর্নির্মিত (অন্তর্ভুক্ত) এবং 500সর্বোচ্চ (একচেটিয়া)। limitমানে আপনার স্ট্রিমটির দৈর্ঘ্য 500 হবে।
int[] list = new int[] {1,2,3,4,5,6};
new Random().ints(0, list.length).limit(10).forEach(p -> System.out.println(list[p]));
র্যান্ডম java.utilপ্যাকেজ থেকে ।
এই প্রশ্নটি একবার দেখুন:
আমি জাভাতে একটি নির্দিষ্ট পরিসরের মধ্যে এলোমেলো পূর্ণসংখ্যা কীভাবে উত্পন্ন করব?
আপনি 0 থেকে আপনার পূর্ণসংখ্যার দৈর্ঘ্য পর্যন্ত একটি এলোমেলো সংখ্যা তৈরি করতে চাইবেন - 1 তবে কেবল আপনার অ্যারে থেকে আপনার int পান:
myArray[myRandomNumber];
আপনি এই পদ্ধতির চেষ্টা করতে পারেন ..
public static <E> E[] pickRandom_(int n,E ...item) {
List<E> copy = Arrays.asList(item);
Collections.shuffle(copy);
if (copy.size() > n) {
return (E[]) copy.subList(0, n).toArray();
} else {
return (E[]) copy.toArray();
}
}
O(nlogn)সময়ের জটিলতার সাথে একটি তালিকা পরিবর্তন করেন, প্রাথমিক অ্যারের তুলনায় মোট 3 গুণ বেশি মেমরি ব্যবহার করে এর অনুলিপিটি দ্বিগুণ করে ফেলুন, যদিও ওপি যে সমস্যাটি বলেছিল তা O(1)সময়ের জটিলতা এবং O(1)স্মৃতি দিয়ে সমাধান করা যেতে পারে ...?
package workouts;
import java.util.Random;
/**
*
* @author Muthu
*/
public class RandomGenerator {
public static void main(String[] args) {
for(int i=0;i<5;i++){
rndFunc();
}
}
public static void rndFunc(){
int[]a= new int[]{1,2,3};
Random rnd= new Random();
System.out.println(a[rnd.nextInt(a.length)]);
}
}
package io.github.baijifeilong.tmp;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Stream;
/**
* Created by BaiJiFeiLong@gmail.com at 2019/1/3 下午7:34
*/
public class Bar {
public static void main(String[] args) {
Stream.generate(() -> null).limit(10).forEach($ -> {
System.out.println(new String[]{"hello", "world"}[ThreadLocalRandom.current().nextInt(2)]);
});
}
}