2013-03-28 152 views
3

我被困在一個關於隨機數的問題中。我使用arc4random()生成隨機數。我想首先生成0-9之間的隨機數。所以我正在使用:從給定數字生成隨機數

int RandomNumber = arc4random() % 9; 

它很好。現在假設我有8,我不希望我的新的隨機數是8,所以我做了以下內容:

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]]; 
} 

所以,我產生比它添加到陣列不是檢查下一個隨機的隨機數這是以前生成的隨機數或不是?如果不是,則將其添加到數組中。

它工作正常的一些出發數字,但是當我離開的與當時幾個選項,我有非常少的機會,產生慾望的隨機數和while循環過程需要大量的時間,由於冗餘的隨機數。

我在找什麼我想要0,1,2,3,4,5,6,7,8,9的隨機數字 如果我下次第一次得到6,隨機數字必須與這些數字只有0,1,2,3,4,5,7,8,90

+4

爲什麼不添加的所有號碼和洗牌的陣列? – 2013-03-28 11:31:39

+0

只要看看我的答案... ...而不是包括maxValue把你的號碼 – 2013-03-28 11:32:28

+1

可能重複[什麼是隨機播放一個NSMutableArray的最佳方式?(http://stackoverflow.com/questions/56648/whats-the- best-way-to-shuffle-an-nsmutablearray) – 2013-03-28 11:32:50

回答

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; 
} 

希望這會有所幫助,謝謝。

謝謝。快樂編碼