Cevap Geçmişi
«« Soruya geri dön
12.04.16 12:46
new Random()   ile yeni bir  Random  nesnesi oluşturmak her seferinde bilgisayarınızın saatine göre rastgele sayı oluşturma işlemini yeniden ayarlanıyor. Bundan sonra  Next  yöntemini çağırdığınızda aldığınız sonuç sonraki  new Random()   ve  Next  ile alacağınız sonucun aynısı oluyor. Bunun bir kaç çözümü var. En basitleri şunlar: 1. Tek bir  Random  nesnesi oluşturup, aynı nesne üzerinden Next yöntemini çağırın. Örnek : class Program {     static void Main(string[] args)     {         Random r = new Random(); 	for (int i=0; i<100; i++) { 		Console.WriteLine(r.Next(1, 1000)); 	}         Console.ReadKey();     } } 2. Bu şekilde çağırmak istemezseniz ve illaki bir fonksiyon isterseniz şöyle bir şey yapabilirsiniz: Örnek: // Şöyle bir statik sınıf oluşturun. public static class Cesitli { 	public static readonly Random r = new Random();         public static readonly Object kilitlemeNesnesi = new Object(); 	// Rastgele sayı üreten fonksiyon 	public static int rastgeleSayi(int alt, int ust) { lock(kilitlemeNesnesi) { 
                    return random.Next(min, max);
              } 	} } // Kullanımı class Program {     static void Main(string[] args)     { 	for (int i=0; i<100; i++) { 		Console.WriteLine(Cesitli.rastgeleSayi(1, 1000)); 	}         Console.ReadKey();     } } Bu örnekteki  lock ,  Random  nesnesi statik tanımlandığından, aynı fonksiyon başka bir iş parçası (thread) tarafından çağırılabileceği için kullanılıyor. Bilmiyorsanız  lock  (kilit) işini ayrıca incelemelisiniz. Özellikle web sitesi gibi bir ortamda kullanıyorsanız bu gerekli. Bunların haricinde  şurada  başka yollar da belirtilmiş.
Ekleyen: cevapsitesi
Değiştiren: cevapsitesi
Cevap olarak seçen: canora
11.04.16 16:06
new Random() ile yeni bir Random nesnesi oluşturmak her seferinde bilgisayarınızın saatine göre rastgele sayı oluşturma işlemini yeniden ayarlanıyor. Bundan sonra Next yöntemini çağırdığınızda aldığınız sonuç sonraki new Random() ve Next ile alacağınız sonucun aynısı oluyor. Bunun bir kaç çözümü var. En basitleri şunlar: 1. Tek bir Random nesnesi oluşturup, aynı nesne üzerinden Next yöntemini çağırın. Örnek : class Program {     static void Main(string[] args)     {         Random r = new Random(); 	for (int i=0; i<100; i++) { 		Console.WriteLine(r.Next(1, 1000)); 	}         Console.ReadKey();     } } 2. Bu şekilde çağırmak istemezseniz ve illaki bir fonksiyon isterseniz şöyle bir şey yapabilirsiniz: Örnek: // Şöyle bir statik sınıf oluşturun. public static class Cesitli { 	public static readonly Random r = new Random();         public static readonly Object kilitlemeNesnesi = new Object(); 	// Rastgele sayı üreten fonksiyon 	public static int rastgeleSayi(int alt, int ust) { lock ( kilitlemeNesnesi ) { return  random . Next ( min ,  max );           } 	} } // Kullanımı class Program {     static void Main(string[] args)     { 	for (int i=0; i<100; i++) { 		Console.WriteLine(Cesitli.rastgeleSayi(1, 1000)); 	}         Console.ReadKey();     } } Bu örnekteki lock, Random nesnesi statik tanımlandığından, başka bir görev tarafından aynı fonksiyon başka bir iş parçası (thread) tarafından çağırılabileceği için kullanılıyor. Bilmiyorsanız lock (kilit) işini ayrıca incelemelisiniz. Özellikle web sitesi gibi bir ortamda kullanıyorsanız bu gerekli. Bunların haricinde  şurada  başka yollar da belirtilmiş.
Ekleyen: cevapsitesi
 
En fazla 3 eski durum gösterilir.