Soru & Cevap

Random Sayıları Oranlama ...

14.12.2015 - 03:31

Merhaba,

Android Studio'da projem için bir algoritma geliştiriyorum, algoritmanın bir bölümünde rastgele sayı üretiyorum ve bundan faydalanıyorum.

final Random rnd = new Random();
    int z = rnd.nextInt(4)+1;

1, 2, 3 ve 4 sayılarını üretmesini istiyorum burada. Bilgisayarın adaletine güvenerek her birini yaklaşık oranlarda ürettiğini varsayıyorum. Yani bu sayılar içinden 100 defa random sayı istesem; yaklaşık olarak %25 oranında 1, %25 oranında 2, %25 oranında 3 ve %25 oranında 4 üreteceğini düşünüyorum.

Sorum şu; Örn: %40 oranında 1, %10 oranında 2, %30 oranında 3 ve %20 oranında 4 üretmek istersem bunu nasıl yapabilirim?

208 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-28812-1452251417.jpg
umutonur
16.12.2015 - 06:28

Merhabalar.. Şöyle birşey yapılabilir;

%40'ı 1,
%10'u 2,
%30'u 3,
%20'si 4 değerlerinden oluşan bir Array tanımlayıp, bu diziden elemanları random olarak çekip, çektiğimiz her elemanı silebilir ve toplam olarak istediğimiz oranlara ulaşmış oluruz. 

yani ; 

int index = random.nextInt(array.size());
array.get(index);
array.remove(index);  

 

Array dizimizin elemanları bitince diziyi tekrar aynı şekilde tanımlayıp işlemlere tekrar devam edebiliriz.

Biraz saçma gibi gelebilir ama yapmış olduğun programa göre bu şekilde bir mantık geliştirilebilir..

Şuanda aklıma gelen bu.. ;)

Örnek Kod : 

        // önce array'ı oluşturuyoruz.
        ArrayList<Integer> arrayList = new ArrayList<>();
        int i = 0;
        int eleman = 1;
        for (;;) {
            arrayList.add(eleman);
            i++;
            if (i == 4) eleman++;
            if (i == 5) eleman++;
            if (i == 8) eleman++;
            if (i == 10) break;
        }
        
        System.out.println("Dizinin eleman sayısı : " + arrayList.size() 
                + "\nDizinin elemanları : ");
        for (int a : arrayList) System.out.println(a);


        //random eleman cektiğimiz kısım;
        System.out.println("Elemanların random dağıtımı : ");
        Random random = new Random();
        int index;
        while (arrayList.size() != 0) {
            index = random.nextInt(arrayList.size());
            System.out.println(arrayList.get(index));
            arrayList.remove(index);
        }

 

Emre Taşbaş
16.12.2015 - 11:02
Anlıyorum fakat ben 1, 2, 3 ve 4 ü random çekiyorum. Yani bu 4 sayıdan hangisinin geleceğini önceden bilmiyorum ama bu yönteme göre %40 lık dilim mesela kesinlikle 1 bunu biliyoruz. Eğer 1, 2, 3 ve 4 ü de random çekip bu array in elemanlarıyla eşleştirebilirsem o zaman çok faydalı bir yöntem olabilir. Şuan bunu yapabilecek bir yöntem bakıyorum ama bulamadım.
Umut ONUR
17.12.2015 - 02:24
anlatmak istediğim şeyi tam olarak aktaramadığımı düşündüğüm için örnek bir kod ekledim. aslında aynı şeyden bahsediyoruz gibime geliyor :)
picture-60234-1446475302.jpg
dvrmctk12
15.12.2015 - 04:54

Tam olarak istediğiniz mümkün değil diye biliyorum çünkü rastgele sayı istiyorsunuz bunu kendiniz seçemezsiniz ancak Atalay Bey'in dediği şekilde yapmanız en mantıklısı gibi geliyor.

Profile picture for user sakelestemur
sakelestemur
15.12.2015 - 12:17

Random olarak 4 değil, 100 üzerinden bir sayı oluşturmayı sağlayın.

Rastgele çıkan sayı:
0-40 olursa sonuç = 1;
40-50 olursa sonuç = 2;
50-80 olursa sonuç = 3;
80-100 olursa sonuç = 4;

şeklinde bir algoritma işinizi görür.

Emre Taşbaş
15.12.2015 - 01:12
Hayır, bahsettiğim şeyle alakası yok.