2012-04-28 2 views
-3

난수를 반환하는 임의 함수를 쓰려고합니다.이 함수는 반환 된 마지막 5 개의 숫자와 다릅니다. 제가 엑셀 VBA에서 사용매번 다른 값을 반환하는 무작위 함수를 만드는 방법은 무엇입니까?

매우 시뮬 코드 :

Function Rand(ByVal Low As Long, ByVal High As Long) As Long 
Randomize 
    Num3 = Num2 
    Num2 = Num1 
    Rand = Int((High - Low + 1) * Rnd) + Low 
    Num1 = Rand 

Do While Num1 = Num2 Or Num1 = Num3 Or Sheets(Csheet).Cells(Num1, 3) > 20 

     Rand = Int((High - Low + 1) * Rnd) + Low 
    Num1 = Rand 
    Loop 
End Function 

수는 히의 단어 [I] .Known이 거짓인지 확인해야합니다.

private int Rand(int Min, int Max) 
     { 
      int i; 
      int x = 0; 
      Random rnd = new Random(); 
      oldNum[3] = oldNum[2]; 
      oldNum[2] = oldNum[1]; 
      oldNum[1] = oldNum[0]; 
      do 
      { 

       i = rnd.Next(Min, Max); 
       x++; 
      } 
      while (Heb[i].Known==false && x<10000 && oldNum.Contains(i)); 
      oldNum[0] = i; 
      return i; 

     } 

그럼에도 불구하고 너무 잘 협력하는 것 doesen't ... 그것은 0마다 반환 나는이 하나를 시도했다.

- (1,000 항목 500) I 함께 oldNum 초기화

최소 및 최대는에서 randomises 목록 범위 히 목록의 아이템의 개수 (-30 (1) 사이에 있어야한다) 인

int[] oldNum = new int[3]; 
+3

Random() 클래스의 문제점은 무엇입니까? –

+3

당신이 예상하지 못한 것은 무엇입니까? – BrokenGlass

+0

흠, 각각의 숫자가 이전의 5와 다를 경우 그 숫자가 무작위가 아닙니다! 어쨌든, 당신의 예제는 임의의 숫자를 필요로 할 때마다 랜덤 라이저를 뿌립니다. 'rnd'를 정적으로 만들고'Random' 함수를 한 번만 호출하십시오. –

답변

1

Queue이 필요합니다.

Random rng = new Random(); 
Queue<int> queue = new Queue<int>(); 

private int Rand(int min, int max) 
{ 
    int r; 

    while(queue.Contains(r = rng.Next(min, max))); 

    queue.Enqueue(r); 

    if(queue.Count > 5) queue.Dequeue(); 

    return r; 
} 
+0

또는 롤오버 색인이있는 간단한 고정 배열. –

+0

좋습니다. 고마워. –

관련 문제