C# random sayıyı sadece tek sayı halinde seçtirmek

371129

Hectopat
Katılım
28 Eylül 2020
Mesajlar
3.794
Makaleler
9
Çözümler
12
Herkese iyi akşamlar.

[CODE lang="csharp" title="Kısa"]int [] oyunculars = {1,3,5,7,9};
Random rastgele = new Random();
int sans = rastgele.Next(oyunculars[0] , oyunculars[4]) ;
[/CODE]

Böyle bir şey denedim fakat aradaki sayıları da aldığı için tek sayı olarak seçtirtemedim. Nasıl yapabilirim?
 
Son düzenleyen: Moderatör:
Yazdığınız kodda sans değişkenine 1 ile 9 arasında rastgele türetilmiş bir sayı atanır. Yapmak istediğiniz yüzdelik bir şans oluşturmak mı?
 
Son düzenleme:
Hocam tam komutu bilmiyorum ama mod alma diye bir komut vardı.
Randomun 2 ye bölümünden kalanı aldırın kalan 1 ise onu seçsin.
 
Yazdığınız kodda sans değişkenine 1 ile 7 arasında rastgele türetilmiş bir sayı atanır. Yapmak istediğiniz yüzdelik bir şans oluşturmak mı?
Belki bu oyunu bilirsiniz. Amacım önce oyuncuyu seçmek sonra ayrı bir random ile akışı seçmek.
Kod:
            Console.WriteLine("Oyuncular ");
            Console.WriteLine();
            Console.WriteLine("1 - " + oyuncular[1]);
            Console.WriteLine("3 - " + oyuncular[3]);
            Console.WriteLine("5 - " + oyuncular[5]);
            Console.WriteLine("7 - " + oyuncular[7]);
            Console.WriteLine("9 - " + oyuncular[9]);
            Console.WriteLine();
            Console.WriteLine("0 - Sarı kart");
            Console.WriteLine("2 - Kırmızı kart");
            Console.WriteLine("4 - Gol");
            Console.WriteLine("6 - Aut");
            Console.WriteLine("8 - Penaltı");
 
bu kodda sans degişkeni 1-9 arasında rastgele bir değer alır. Eğer sen dizide rastgele bir index istiyorsan. sans = rastgele.Next(0, oyunculars.lenght) kullanmalısın.
 
2 katı kadar hesaplayıp sonra integer bölme yapabilirsin. Ama yine çift sayılar gelebilir.
Görünen o ki Random.Next() verilen aralıkta değer oluşturuyor.

Kod:
int [] oyunculars = {1, 3, 5, 7, 9};
Random rastgele = new Random();
int sans = rastgele.Next(oyunculars[0], oyunculars[4]);
          
if (sans % 2 == 0){
    sans++;
}
          
Console.WriteLine(sans);
 
Sanırım aradığın şey bu:

C#:
  class Program
    {
        static int[] oyunculars = { 1, 3, 5, 7, 9 };
        static Random rd = new Random();
        
        public static int sayılar()
        {
            return oyunculars[rd.Next(oyunculars.Length)];
          
        }
        static void Main(string[] args)
        {
            Console.WriteLine(sayılar());
          
        }
    }
 
Random.Next(begin, end) // (end exclusive (son hariç))
oyuncular[0] = 1 ve oyuncular[4] = 9. Çünkü bilgisayarlar 0'dan başlayarak sayar.

Random.Next(3, 9) derseniz de [3, 4, 5, 6, 7, 8] arasından bir sayı sonuncu alırsınız. 9 önceden de bahsettiğim sebepten çıktıda görünmez.

Eğer bir oyuncu ve bir kart seçecekseniz. Oyuncular ve Kartlar adında 2 ayrı dizi oluşturup ikisinden de sıra ile birer eleman seçmeniz daha mantıklı olacaktır.


C#:
// Main dışı
static Random rand new Random();
readonly string[] oyuncular = ["ahmet", "mehmet", "ali", "veli"];
readonly string[] akislar = ["Kırmızı kart", "Gol", "Aut", "Penaltı"];

public static string oyunuSec() => oyuncular[rand.Next(oyuncular.length)];
public static string akisSec() => akislar[rand.Next(akislar.length)];

// Main içerisi

string seciliOyuncu = oyuncuSec();
string seciliAkis = akisSec();

Tabii score vs tutacaksanız ayrı bir array'de tutmak yerine Oyuncu objesi yaratıp içerisine Score, isim gibi Attribute'lar ekleyebilirsiniz.
 
Son düzenleme:

Yeni konular

Geri
Yukarı