2012-09-04 39 views
2

嘿大家有什麼想法來隨機化我從我的-plist文件中提取的問題?如何隨機化從我的字典plist中提取的問題

-(NSUInteger)nextQuestionID:(NSUInteger)question_number{ 
return (question_number>=[self.questions count]-1) ? 0 : (question_number+1); 
return 0; 

} 

-(NSDictionary*) getQuestion:(NSUInteger)question_number{ 
if (question_number>=[self.questions count]) question_number = 0; 
return [self.questions objectAtIndex:question_number]; 
return NULL; 


} 

回答

1

爲了得到一個隨機整數,我會建議使用arc4random功能,這裏是一些代碼來做到這一點:

int randomInt = arc4random() % questionNumber; 
return [self.questions objectAtIndex: randomInt]; 
0

question_number = arc4random() % self.questions.count;

+0

謝謝阿里的幫助,我試圖把這個,但它似乎沒有奏效,我把它放在這樣我的猜測是錯誤的 - (NSUInteger)nextQuestionID:(NSUInteger )question_number { \t return(question_number> = [self.questions count] -1)? 0 :(問號+ 1); \t return 0; (NSDictionary *)getQuestion:(NSUInteger)question_number { \t if(question_number> = arc4random()%[self.questions count])question_number = arc4random(); \t return [self.questions objectAtIndex:question_number]; \t return NULL; } – user1646089

+0

Errr你甚至明白你在寫什麼?!基本上你只寫了「生成一個隨機數,然後**如果'question_number'大於或等於這個隨機數然後再生成另一個隨機數」。你期望這個代碼會做什麼? – AliSoftware

0

一套題號的隨機數

替換功能

-(NSDictionary*) getQuestion:(NSUInteger)question_number{ 
    if (question_number>=[self.questions count]) question_number = 0; 
    question_number = arc4random()%[self.questions count];// changes made here 
    return [self.questions objectAtIndex:question_number]; 
    return NULL; 


} 
+0

從'man arc4random' - '[arc4random] ...'被推薦用於比如「arc4random()%upper_bound」的結構,因爲它避免了「模偏差」,當上限不是2的冪。' –

1

您可以使用arc4random_uniform(upper_bound)函數。該參數是您的隨機數的上限。

一個例子:

int index = arc4random_uniform([self.question count]); 
0

隨機整數:

srand(time(nil)); 
for (int i = 0; i < 100; i++) { 
    NSLog(@"random number between 72 and 96 : %d", rand() % (96 - 72) + 72); 
} 

UPDATE

併爲您的具體情況:

- (NSUInteger)nextQuestionID { 
    srand(time(nil)); 
    return rand() % [self.questions count]; 
} 

- (NSDictionary*)getQuestion { 
    return [self.questions objectAtIndex:[self nextQuestionID]]; 
} 

更新#2

測試下面的循環兩次,三次或更多次,並比較輸出:

srand(time(nil)); 
for (int i = 0; i < 10; i++) { 
    NSLog(@"random number : %d", rand() % 89 + 10); 
} 

你應該得到10和99之間10個隨機數字,我測試過它在真正的設備,而不是在模擬器上,但它也應該在模擬器上工作。

如果您總是得到相同的結果,請告訴我。

+0

您好holex,我們已經按照您的建議輸入了代碼,但它似乎並沒有將隨機問題拉出來,這是我們輸入的內容。 (NSUInteger)nextQuestionID:(NSUInteger)question_number { srand(time(nil)); return rand()%[self.questions count]; (NSDictionary *)getQuestion:(NSUInteger)question_number { \t if(question_number> = [self.questions count])question_number = 0; \t return [self.questions objectAtIndex:question_number]; \t return NULL; } – user1646089

+0

我不知道...你的代碼是一個巨大的混亂。檢查我更新的答案... – holex

+0

感謝您的幫助Holex,我仍然努力工作,我已經用上述代碼取代了我的代碼,但仍然沒有運氣,我錯過了我需要的任何東西以便讓這個工作正常?很抱歉,我很想問這麼多問題。謝謝。 – user1646089