2014-03-28 2 views
1

이것은 클래스 클래스 내부의 메서드 일부입니다. 나의 목표는 숫자가 iCell이라는 변수에 저장 될 임의의 숫자를 생성하는 것입니다. 그 후 iCell은 switch 문에 문자, 셀을 변경하는 데 사용됩니다. "오류, 비 정적 필드, 메서드 또는 속성 'System.Random.Next (int, int)'에 대한 개체 참조가 필요하다는 오류 메시지가 나타나는 iCell = Random.Next(1,9); 줄에서 오류가 발생했습니다. 클래스 메소드에서 난수 생성기를 사용할 수 있습니까?클래스 메서드의 난수 생성기

public void CPUMove() //method marks cell for CPU 
    char cell; 
    int iCell; 
    Random rand = new Random(); 
    iCell = Random.Next(1, 9); 
    switch (iCell) 
    { 
     case 1: 
      cell = '1'; 
     break; 
     case 2: 
      cell = '2'; 
     break; 
     case 3: 
      cell = '3'; 
     break; 
     case 4: 
      cell = '4'; 
     break; 
     case 5: 
      cell = '5'; 
     break; 
     case 6: 
      cell = '6'; 
     break; 
     case 7: 
      cell = '7'; 
     break; 
     case 8: 
      cell = '8'; 
     break; 
     case 9: 
      cell = '9'; 
     break; 
    } 
+0

는 웹 또는 _ "객체 참조가 비 정적 필드, 메서드 또는 속성에 대한 요구된다"_이 사이트를 검색 할 수 있습니다. – CodeCaster

답변

6
iCell = rand.Next(1, 9); 

사용하여 이미 생성 된 객체입니다.

Random 인스턴스 을 한 번 프로그램에 만들어야합니다. 어쩌면 클래스 변수 또는 정적 클래스 변수로 만들 수 있습니다. 방금 또한

을 만든 인스턴스를 참조하고 있도록

3

당신은 rand.Next보다는 Random.Next하려면, 당신은 큰 switch 문을 제거 할 수 있습니다. 그냥 쓰기 :

cell = iCell.ToString()[0]; 
2

다른 답변에 추가 : 랜덤 인스턴스가 정적 만드는 더 낫다.

class MyClass { 
    static Random rand = new Random(); 

    public void CPUMove() { //method marks cell for CPU 
     char cell; 
     int iCell; 
     iCell = rand.Next(1, 9); 
     cell = iCell.ToString()[0]; 
    } 
} 
1

당신은 그런 식으로 작업을 수행 할 수 있습니다

// Simplest case, not thread safe 
// The same generator for all CPUMove() calls 
private static Random rand = new Random(); 

// method marks cell for CPU 
public void CPUMove() { 
    // Don't re-create Random each time you need a random value: 
    // the values generated will be badly skewed 
    // Random rand = new Random(); 

    // You don't need any switch/case here, just a conversion 
    Char cell = (Char) (rand.Next('1', '9')); 
    ... 
}