Hỏi về hàm random trong C#

Các bác cho em hỏi lệnh srand(time(NULL)) trong C++ nó có tác dụng là cấp phát các giá trị ngẫu nhiên “khác nhau” sau mỗi lần debug,vậy cú pháp của nó trong C# là gì ợ :frowning:

3 Likes

Trong C# thì việc random nó còn dễ hơn rất nhiều. Đối với C++ thì mình buộc phải cấp cho hàm srand một cái “seed” là thời gian. Nhưng trong C# thì họ đã làm sẵn luôn như vậy cho mình mỗi khi mình khởi tạo một đối tượng Random.

Class Random còn cấp cho mình nhiều phương thức để tạo ra số ngẫu nhiên, ví dụ dưới sử dụng phương thức Next cho phép random một số thuộc về một đoạn giá trị cho trước.

using System;

class Program
{
    static void Main()
    {
	// ... Create new Random object.
	Random r = new Random();
	// ... Get three random numbers.
	//     Always 5, 6, 7, 8 or 9.
	Console.WriteLine(r.Next(5, 10));
	Console.WriteLine(r.Next(5, 10));
	Console.WriteLine(r.Next(5, 10));
    }
}

Output mẫu, có thể thay đổi trên mỗi lần chạy

5
7
6

Bởi vì như ở trên mình đã giới hạn random trong đoạn [5, 10] nên các giá trị in ra cũng nằm trong đoạn này.

5 Likes

Theo mình dc biết thì hàm random bên c# sẽ phát các số ngẫu nhiên mỗi lần được gọi/sử dụng, bạn thử cách này xem :


    Random _r = new Random();
    int n = _r.Next();

Trong C#, bạn không cần truyền time vào, vì măc định nó sẽ lấy giờ hệ thống để từ đó phát sinh ra số ngẫu nhiên, còn công thức lấy giờ hệ thống phát sinh ra số ngẫu nhiên thế nào thì mình không biết :smile:

5 Likes

tks các bác,đã test lại ạ :smiley:

3 Likes

Cảm ơn chú nhé! Bổ ích quá ạ.

1 Like
using System;

class Program
{
    static void Main()
    {
        // Generate / Create new Random object.
        Random r = new Random();
        //  Get random numbers.

        // generate many number random
        for(int i = 0; i < 10; i++)
        {
            Console.Write(" " + r.Next(0, 10));
        }
        // generate many number random
        for (int i = 0; i < 7; i++)
        {
            Console.WriteLine(" " + r.Next(0, 10));
        }
        // generate many number random
        for (int i = 0; i < 20; i++)
        {
            Console.Write("; "+r.Next(10, 99));
        }
        //Console.WriteLine(r.Next(0, 10));
        //Console.WriteLine(r.Next(0, 10));
        //Console.WriteLine(r.Next(0, 10));
        Console.Read();
    }
}

output

0 1 0 1 8 0 9 0 9 6 1
 1
 5
 7
 9
 4
 5
; 34; 97; 82; 32; 71; 42; 31; 75; 73; 59; 50; 43; 69; 47; 47; 84; 63; 19; 14; 17
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?