1

我有一个非常基本的随机数函数,它从一个范围内生成一个随机数;

IE:

// The random is seeded earlier on in the applicationDidFinishLaunching() function
-(NSUInteger)makeRandomNumber:(NSUInteger)minNumber to:(NSUInteger)maxNumber
{
 //NSUInteger i = (NSUInteger)( (random() / (double)RAND_MAX) * y);

 NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 return i;
}

我想为这个函数添加一个可选的模运算,这样你就只返回一些东西的模数。

我想做这个来为随机的人生成工资,我发现 5 或 0 的工资更具可读性。

我不确定如何制作可选参数或强制随机化继续循环,直到找到可选模值。

另一个问题是,如果找不到模数,有时循环可以永远继续下去。

IE;

在 0 到 100 之间随机化,并返回一个模数为 5 的值。

编辑:这应该适用于任何范围,无论最小值或最大值是多少。上述数字只是示例。

4

3 回答 3

3

ITYM 5 的倍数。对于您的示例,您只需生成一个介于 0 和 20 之间的随机值,然后将其乘以 5。

于 2010-06-24T12:11:00.517 回答
-1

我认为一个循环会很好地工作:

 NSUInteger i = 0;
 do {
   NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 } while(i % 5 != 0);
于 2010-06-24T12:12:16.037 回答
-1

整数除法将确保您的数字是roundNumber仅的倍数,因为它会在除法中截断小数,然后在乘法中恢复原始四舍五入的数字。

// The random is seeded earlier on in the applicationDidFinishLaunching() function
-(NSUInteger)makeRandomNumber:(NSUInteger)minNumber to:(NSUInteger)maxNumber round:(NSUInteger) roundNumber
{   
 NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 return (i / roundNumber) * roundNumber;
}
于 2010-06-24T13:35:33.087 回答