C #을 사용하여 범위 내에서 난수 생성


267

범위 내에서 난수를 생성하려면 어떻게해야합니까?

답변:


419

당신은 시도 할 수 있습니다

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

보세요

Random 클래스 , Random.Next 메서드 (Int32, Int32)Random.NextDouble 메서드


30
NextDouble ()을 사용하고 하한을 0으로하지 않으려는 경우 메모를 추가하십시오. 상한과 하한의 차이를 곱한 다음 하한과 0의 차이를 더합니다. -1 대 1 double rDouble = (r.NextDouble()*2)-1.0;
Tom Heard

2
또는 -1.0과 1.0 범위의 단순화 된 이중 생성기 : Double randDoubleY = new Random (). Next (-100, 100) / 100.0D;
보이시 베이크

1
Random()시간 종속 시드를 사용하지만 명시 적으로 작성하면 가독성이 향상됩니다.
Evgeni Sergeev

44

아래 코드를 사용해보십시오.

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

다음과 같은 것 :

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

2
무엇을 위해 DateTime.Now.Millisecond?
Hille

1
Random 객체는 단순히 주어진 값에 대해 많은 수학을 수행 하며 동일한 Random 객체에 대한 Next ()의 각 호출로 결과가 나타납니다. 이전 호출에 대해 임의의 값으로. 다른 임의의 개체 에서 결과를 더 임의적으로 만들려면 다른 숫자 (여기서는 DateTime.Now.Millisecond)로 시작합니다. 값을 변경하지 않고 상수를 입력하면 .Next ()에서 동일한 결과를 얻을 수 있습니다.
Mike M

12
Random이미 시스템 값으로 시드 Millisecond되고 0과 999 사이의 숫자 일뿐입니다.이 행 쌍이 항상 코드로 함께 묶인 경우 rnd.Next매번 시드가 재설정되므로 1000 개의 값만 가능합니다 . 같은 시드, 같은 난수. 수동 시드는 그대로 두겠습니다.
존 맥도날드

@JohnMcDonald, 맞습니다. 정확히 말하자면,로 초기화됩니다 Environment.TickCount.
Parag Meshram

11

사용하다:

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

2
범위를 지정하지 않습니다.
Winger Sendon

1
임의의 범위를 얻으려면 lower_value + r.Next (10)을 수행하십시오.
오스틴 살 가트



3

다음은 Darrelk answer 에서 업데이트 된 버전입니다 . C # 확장 메소드를 사용하여 구현됩니다 . 이 메소드가 호출 될 때마다 메모리 ( new Random () )를 할당 하지 않습니다 .

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

사용법 (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);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.