Turkcell | Geleceği Yazanlar

Random Sayıları Oranlama

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?

    +1

    Atalay Keleştemur

    Artistanbul - 15 Aralık 2015

    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.tsbs

      Sa, 15/12/2015 - 13:12
      Hayır, bahsettiğim şeyle alakası yok.

    0

    Umut ONUR

    Özgür Bir Yazılımcı.. :) - 16 Aralık 2015

    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.tsbs

      Çar, 16/12/2015 - 23: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.

      umutonur

      Per, 17/12/2015 - 14: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 :)

    0

    Devrim

    Hikmet Nazif Kurşunoğlu Lisesi/Bilişim - 15 Aralık 2015

    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.

    Bu soruya cevap vermek için üye olmanız veya giriş yapmanız gerekmektedir.