2013-10-23 2 views
0

저는 첫 번째 '프로젝트'로서 바위 종이 가위 게임을 만들려고합니다. 그래서 컴퓨터가 자신의 차례를 나타내는 1-3의 임의의 숫자를 생성해야합니다. 난수를 생성 할 수 없습니다. Visual C#

는이 코드를 노력했지만 그것이 작동하지 않는 이유를 알아낼 수 없습니다 : 어떤을위한

A field initializer cannot reference the non-static field, method, or property FileName.Form1.rnd 

감사 :

Random rnd = new Random(); 
int pchand= rnd.Next(1, 4); 

말한다 RND 아래 붉은 구불 구불 한 선있다 도움!

+0

Form1에 코드를 포함 할 수 있습니까? –

+2

방법 안에 넣었습니까? 아니면 수업 시간에? – Andrey

+2

int pchand = new Random(). 다음 (1, 4); ' –

답변

10

문제는 함수 수준이 아닌 클래스 수준에서 수행하기 때문에 발생합니다.

클래스 수준에서 임의로 선언하는 것이 좋지만 함수 내에서 pchand을 작성해야합니다. 같은

뭔가 :

public class Test 
{ 
    static Random rnd = new Random(); 

    public static void Main() 
    { 
     int pchand = rnd.Next(1, 4); 
    } 
} 

원래 시도가 컴파일러는 필드가 초기화되는 순서를 보장하지 않기 때문에 컴파일 타임 오류가 발생하는 이유. 따라서 사용하기 전에 rnd이 설정된다는 보장은 없습니다. 따라서 컴파일러는 런타임 중에 예기치 않은 null 참조 오류를 피할 수 없도록합니다. OP에


참고 : 코드의보다 확장 된 예제를 포함하여이 문제에 대한보다 구체적인 솔루션을 사용할 것이다, 그러나 희망 내 예제 코드는 당신이해야 할 일을 이해하기에 충분한 제네릭

+0

+1을 만족시키지 않는다 그러나 "왜 pchand를 기능 안에서 끝내야하는지"설명하십시오 : – Tarik

+1

@Tarik : 피하기 위하여 오류? : P ... 무언가를 추가 할 것입니다 – musefan

+0

분명히 초보자를 상대하고 있습니다. ** ** 그가 해결해야하는 것뿐만 아니라 왜 ** **를 이해하도록 도와 드리겠습니다. – Tarik

관련 문제