Math.Random() Fonksiyonunda Her Sayıyı Bir Defa Atamak?
-
for(int x=0; x<15; x++){
int i = (int) (Math.random()*15);
}
işleminde i için her seferinde farklı ama rastgele geğer atansın istiyorum.. yani döngü ilk döndüğünde 2 veriliyorsa kalan 14 döngüde 2 değeri tekrar verilmesin istiyorum ? bunu yapabilir miyiz?
-
Herhangi bir kontrol olmadan yapamazsın.
Çıkan sayıları elinde tutup, gelen her yeni sayıya bakmalısın, yeni sayı çıkan sayılarda var mı diye.
-
package genetikalgoritma; public class GenHavuzu { public static int randomsayi(){ int i = (int) (Math.random()*(Math.random()*15)); return i; } public static int [] sayi = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; GenHavuzu nesne = new GenHavuzu(); public static char rastsalharf(){ char [] dizi = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'}; int i= randomsayi(); if(sayi[i]==1){ GenHavuzu.sayi[i]++; return dizi[i]; } else { return rastsalharf(); } } public static void main(String [] args){ char [][] populasyon = new char [100][15]; for(int i=0; i<100; i++){ for(int j=0; j<15; j++){ populasyon[i][j] = rastsalharf(); } } for(int i=0; i<100; i++){ System.out.println(); for(int j=0; j<15; j++){ System.out.print(populasyon[i][j]); } } } }
A dan O ya kadar olan harfleri her seferinde rastgele sıralanacak şekilde populasyon matrisinde tutmak istiyorum.. fakat aynı harf 2 3 kez kullanılıyor bunun
bir kere kullanılsın istiyorum -
Random rand = new Random();
List<Integer> randNumb = new LinkedList<Integer>();
for(int i = 0; i < 1000; i++)
{
int randomNumb = rand.nextInt(1000);
if(!randNumb.contains(randomNumb) && randNumb.size() < 15)
{
randNumb.add(randomNumb);
}
else
{
break;
}
}ayni yontemi karakterlere uygulayarak sorunu cozebilirsin.
-
harfleri bir koleksiyona at ve koleksiyonun ilk countunu bir değişkene atıp, countu kadar bir döngü aç
her seferinde koleksiyonun countu kadar random eleman seçtirip onu ekrana yazdır ve koleksiyondan çıkar
böylece aynı harf iki kez görünmeyecek ve gereksiz yere kontrol yapmak zorunda kalmayacaksın..
-
Mesela 15 e kadar üreticeksen 15 elemanlı bi dizi aç dizinin her değerini kendi index değerine ata.Sonrada her elemanı dizinin rastgele başka bi elemanıyla yer değiştir.Sonrada dizinin elemanlarını sırayla kullanırsın aynı eleman tekrar gelmeden random sayı üretmiş olursun.
-
seretide bunu yazdı:
-----------------------------
Mesela 15 e kadar üreticeksen 15 elemanlı bi dizi aç dizinin her değerini kendi index değerine ata.Sonrada her elemanı dizinin rastgele başka bi elemanıyla yer değiştir.Sonrada dizinin elemanlarını sırayla kullanırsın aynı eleman tekrar gelmeden random sayı üretmiş olursun.
-----------------------------tam olarak nasıl yapacam anlamadım :s
-
sLeymN bunu yazdı:
-----------------------------
seretide bunu yazdı:
-----------------------------
Mesela 15 e kadar üreticeksen 15 elemanlı bi dizi aç dizinin her değerini kendi index değerine ata.Sonrada her elemanı dizinin rastgele başka bi elemanıyla yer değiştir.Sonrada dizinin elemanlarını sırayla kullanırsın aynı eleman tekrar gelmeden random sayı üretmiş olursun.
-----------------------------tam olarak nasıl yapacam anlamadım :s
-----------------------------dizinin her elemanında kendi index değeri olucak 1. elemanında 1 2 de 2 ...
sonra her elemanı dizinin rastgele başka elemanıyla değiştiriceksin kodunu yazıyorum
for(i=1;i<=N;i++){
dizi[i]=i;
}
for(i=1;i<=N;i++){
swap(dizi[i],dizi[Math.random()*N);
}
dizinin içindeki değerler dizide rastgele olarak yerleşicek sonrada sırayla elemanları kullanırsın
-
Yukardakilere ek olarak random değerleri Set'te tutabilirsin.
Java Collections Framework'e bakarsan Set'in özellikleri matematikteki Set ile benzer. Yani aynı elemanı istediğin kadar eklemeye çalış eklemez, yalnızca bir tane olur.
-
hocam o zaman cikansayıları bir arraye atıp, sonra arrayde aratıp, yoksa yazdıracak birşey yapabilirsin.
Hea performanslı mı olur yada daha kolayı varmı bilmem (kesin vardır).