2013-03-28 5 views
3

난수와 관련하여 한 가지 문제가 있습니다. arc4random()을 사용하여 난수를 생성 중입니다. 처음에 0-9 사이의 랜덤 숫자를 생성하고 싶습니다. 그래서 나는 사용하고있다 :주어진 숫자에서 난수 생성

int RandomNumber = arc4random() % 9; 

그 좋은.

NSMutableArray *aryTemp = [NSMutableArray new]; 
for (int i = 0; i < [aryTemp Count] < 9; i++) { 
    int RandomNumber; 
    do { 
     RandomNumber = arc4random() % 9; 
    } 
    while ([aryTemp containsObject:[NSNumber numberWithInt:RandomNumber]]) 
    [aryTemp addObject:[NSNumber numberWithInt:RandomNumber]]; 
} 

그래서 다음 무작위 검사보다 배열에 추가하는 대신 임의의 숫자를 생성하고 : 지금은 8. 나는 나의 새로운 난수 그래서 내가 수행 한 다음 8 싶지 않아 가지고 가정 이 숫자는 이전에 생성 된 임의의 숫자인가요? 배열에 추가하는 것이 아니라면.

시작 숫자가 거의 없어도 작동하지만 몇 가지 옵션을 남겨 두었을 때 원하는 임의의 숫자를 생성 할 확률이 적어졌고 중복되는 난수로 인해 많은 시간이 걸립니다.

0, 1, 2, 3, 4, 5, 6, 7, 8, 9의 난수를 원합니다. 처음에 다음 번에 6을 얻는다면, 이 숫자는 0, 1, 2, 3, 4, 5, 7, 8, 9

+4

왜 모든 번호를 추가하고 배열을 임의로 셔플하지 않습니까? –

+0

그냥 내 대답을 좀 봐 ... maxValue 대신 번호를 넣어 –

+1

[NSMutableArray를 셔플하는 가장 좋은 방법은 무엇입니까?] (http://stackoverflow.com/questions/56648/whats-the- 가장 좋은 방법 - 셔플 - 앤 - 스미 셔널 어레이) –

답변

2

편집 : 위의 설명에 연결된 answer은 더 우아한 해결책을 제안합니다. 교장 내 순진한 접근 방식으로 :

만약 당신이 제대로 이해 : 0-9 범위에서 모든 항목을 무작위로 선택하고 싶습니다.

내 초기 접근 방식은 범위의 모든 항목이있는 가방을 만드는 것입니다. 항목을 무작위로 선택할 때마다 가방에서 꺼내서 다시 선택하지 마십시오.

다음 코드는이를 달성해야

int randomNumber; 

// Fill remainingNumbers array with numbers 0-9 
NSMutableArray *remainingNumbers = [NSMutableArray array]; 
for (int i = 0; i < 10; i++) { 
    [remainingNumbers addObject:[NSNumber numberWithInt:i]]; 
} 

// Create tempNumbers array to store our random numbers in 
NSMutableArray *tempNumbers = [NSMutableArray array]; 


for (int i = 0; i < 9; i++) { 
    // Create a random number in the range of the indexs for remainingNumbers array 
    int maxIndex = [remainingNumbers count] -1; 
    randomNumber = arc4random() % maxIndex; 

    // Add random number to tempNumbers array 
    [tempNumbers addObject:[remainingNumbers objectAtIndex:randomNumber]]; 

    // Remove the number from the remaining numbers so we don't add duplicates 
    [remainingNumbers removeObjectAtIndex:randomNumber]; 
} 
// Add final number 
[tempNumbers addObject:[remainingNumbers objectAtIndex:0]]; 


// Print the array of 'randomly selected numbers' 
NSLog(@"The array is: %@", tempNumbers); 
0

가, 감사이 도움이 하나

//call method 
int tempvalue = (int) [self randomFloatBetween:0 secondParam:9]; // pass number as per your need 


-(float) randomFloatBetween:(int) smallNumber secondParam:(float) bigNumber 
{ 
    float diff = bigNumber - smallNumber; 
    return (((float) rand()/RAND_MAX) * diff) 
    + smallNumber; 
} 

희망을 시도합니다.

감사합니다. 해피 코딩