Menghasilkan angka acak dalam rentang menggunakan C #


267

Bagaimana cara menghasilkan angka acak dalam rentang?

Jawaban:


419

Anda dapat mencoba

Random r = new Random();
int rInt = r.Next(0, 100); //for ints
int range = 100;
double rDouble = r.NextDouble()* range; //for doubles

Lihatlah

Kelas Acak , Metode Random.Next (Int32, Int32) dan Metode Random.NextDouble


30
Hanya untuk menambahkan catatan, jika Anda menggunakan NextDouble () dan tidak ingin batas bawah menjadi nol. Anda kalikan dengan perbedaan antara batas atas dan batas bawah, lalu tambahkan perbedaan antara batas bawah dan nol. Jadi untuk -1 hingga 1 double rDouble = (r.NextDouble()*2)-1.0;
Tom Heard

2
Atau generator ganda yang disederhanakan dalam kisaran -1.0 dan 1.0: Double randDoubleY = Random baru (). Selanjutnya (-100, 100) / 100.0D;
BoiseBaked

1
Random()menggunakan seed yang bergantung pada waktu, tetapi menuliskannya secara eksplisit lebih baik untuk dibaca.
Evgeni Sergeev

44

Coba kode di bawah ini.

Random rnd = new Random();
int month = rnd.Next(1, 13); // creates a number between 1 and 12
int dice = rnd.Next(1, 7); // creates a number between 1 and 6
int card = rnd.Next(52); // creates a number between 0 and 51

34

Sesuatu seperti:

var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);

2
untuk apa DateTime.Now.Millisecond?
Hille

1
Anda harus meletakkan sesuatu untuk memulainya ...... objek Acak hanya melakukan banyak matematika pada nilai yang Anda berikan, dan melakukannya dengan cara yang setiap panggilan Next () pada objek acak yang sama akan menghasilkan dalam nilai yang cukup acak untuk panggilan sebelumnya. Untuk membuat hasilnya lebih acak di berbagai objek acak , Anda mulai dengan angka yang berbeda - di sini, DateTime.Now.Millisecond. Jika Anda meletakkan nilai konstanta, alih-alih berubah, Anda akan mendapatkan hasil yang sama dari .Next ().
Mike M

12
Randomsudah diunggulkan dengan nilai sistem, dan Millisecondhanya angka antara 0 dan 999. Jika pasangan garis ini selalu bersama dalam kode, hanya akan ada 1000 nilai yang mungkin rnd.Nextkarena benih diatur ulang setiap kali. Benih yang sama, nomor acak yang sama keluar. Saya akan meninggalkan benih manual.
John McDonald

@ JohnMcDonald, Anda benar. Untuk lebih tepatnya, ini diinisialisasi dengan Environment.TickCount.
Parag Meshram

11

Menggunakan:

Random r = new Random();
 int x= r.Next(10);//Max range

2
Ini tidak menentukan rentang.
Sayap Sendon

1
Anda cukup melakukan lower_value + r.Next (10) untuk mendapatkan rentang acak.
Austin Salgat

6

Untuk pembaca masa depan jika Anda ingin nomor acak dalam rentang gunakan kode berikut:

public double GetRandomNumberInRange(double minNumber, double maxNumber)
{
    return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
}

C # Random ganda antara min dan maks

Contoh kode


2
Formula harus dengan cara berikut:return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
Frank Sebastià


3

Ini adalah versi terbaru dari jawaban Darrelk . Ini diimplementasikan menggunakan metode ekstensi C # . Itu tidak mengalokasikan memori ( Random baru () ) setiap kali metode ini dipanggil.

public static class RandomExtensionMethods
{
    public static double NextDoubleRange(this System.Random random, double minNumber, double maxNumber)
    {
        return random.NextDouble() * (maxNumber - minNumber) + minNumber;
    }
}

Penggunaan (pastikan untuk mengimpor namespace yang berisi kelas RandomExtensionMethods):

var random = new System.Random();
double rx = random.NextDoubleRange(0.0, 1.0);
double ry = random.NextDoubleRange(0.0f, 1.0f);
double vx = random.NextDoubleRange(-0.005f, 0.005f);
double vy = random.NextDoubleRange(-0.005f, 0.005f);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.