Menghasilkan angka acak dalam rentang menggunakan C #

267

Bagaimana cara menghasilkan angka acak dalam rentang?

RoR
sumber

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

Adriaan Stander
sumber
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
Vishal Kiri
sumber
34

Sesuatu seperti:

var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);
ozczecho
sumber
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
Kay
sumber
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

Darrelk
sumber
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);
Konstantin Gindemit
sumber