2012-03-30 4 views
1

나는이 질문을 많이 요청합니다 확신하지만 난 나에게 도움이 어디 답을 찾을 수 없습니다. 0과 1 사이의 무작위 배정을 만들려고하는데 오류가 계속 발생합니다.문제는

map[x,y].setBit((int) Math.Round(((((double)Random.Next(100))/100) * 1.3), 2); 

은 내가 오류는 "개체 참조가 비 정적 방법에 필요한, 또는 속성이있다"System.Random.Next (INT)는 "

답변

8

목 e 오류 메시지는 정확하게 문제를 알려줍니다. Random은 수업입니다. Next은 비 정적 방법입니다. 이 메소드를 사용하려면 클래스의 인스턴스 또는 객체 참조가 필요합니다.

var random = new Random(); 
// use random.Next(upperLimit); 
당신이 꽉 루프에서 random를 사용하는 경우, 당신이 또는 다른 높은 수준에서 (예 : 클래스의 멤버 필드와, 그것을 루프 외부의 인스턴스를 생성하고 재사용 할 것이라는 점을주의해야한다

). 클래스가 시드되는 방식에 따라 연속적인 인스턴스는 동일한 '임의의'값 시퀀스를 생성합니다. This is a common pit that people have fallen into.


당신은 또한, 0에서 99까지의 정수를 받고 두 배로 캐스팅, 100에 의해 분할되는 경우 사용량에 따라 알고 있어야합니다 ... 더 간단한 방법이있다. 단순히 0 이상 1.0 미만 제공 NextDouble()를 사용한다.

double d = random.NextDouble(); 
+0

고마워! 당신은 아마 말할 수있는 내가 그 오류를 봤 어떤 이유로, 나는 그 해결책을 가진 적이 없어 ... 나는 ^,이 언어에 조금 새로운 해요.^ – Glen654

+1

당신은 바로이 질문에 이미 4는 것을주의하는 기뻐할 것입니다 [구글 (https://www.google.com/#hl=en&output=search&sclient=psy-ab&q=An+object+reference+is+required+for+the+non-static%2C+method%2C+or + 속성 + % 22System.Random.Next (INT) OQ = + 객체 + 참조 +는 + 비 정적 %의 2C + 메서드 %를 +에서 + 필요한 IS + 2C + 또는 + 속성 + % 22System.Random.Next (INT) 수성 = f & aqi = & aql = & gs_l = hp.3 ... 553l5395l0l5883l3l3l0l0l0l0l166l380l1j2l3l0.frgbld. & pbx = 1 & bav = on.2 또는 .r_gc.r_pw.r_qf., cf.osb & fp = 8eaf7f526a5ea16c & biw = 1440 & bih = 815). ;) –

3

임의의 클래스 말한다. Random.Next() 비 정적 방법이다

따라서 당신이 Random 클래스의 인스턴스를 인스턴스화해야합니다.. (참고 : 낭비가 지적했듯이, 루프이 지역하지 않습니다 ...)

Random rnd = new Random(); 

map[x,y].setBit((int) Math.Round(((((double)rnd.Next(100))/100) * 1.3), 2); 
+0

마치 루프 (중첩 된 루프 일 수도 있음)에서 보이는 것처럼이 두 줄은 서로 가깝게 보이게됩니다. 'rnd'가 로컬이 아닐 가능성이 높다는 것을 언급 할만한 가치가 있습니다. – spender

+0

좋은 지적. .... –