我是Xcode开发的新手,我想知道如何从2个输入中生成随机数。
在IB中,我有2个文本字段(带数字键盘),表示要生成的数字的间隔(即从3到7)。我想知道如何从2个文本域获取输入并执行从这些输入生成随机数的方法。
答案 0 :(得分:5)
尝试生成真正的随机数时涉及许多问题。例如,请注意, rand()和 random()等函数会根据“种子值”生成数字序列。这意味着如果种子值相同,则生成的数字序列将相同。有多种方法可以使用“随机”种子 - 即使用当前的日期和时间 - 但这些方法的可靠性和安全性值得怀疑。
随着数字生成器的发展,这些问题得到解决,因此后来的生成器通常比之前的生成器更好: rand 通常不像 random 那样随机,和随机不像 arc4random 那样随机。
arc4random()的当前问题,在其手册页中有记载,使用模数计算 - 如“arc4random()%UPPER_LIMIT” - 可以引入统计偏差,如果UPPER_LIMIT不是偶数。因此,arc4random族增加了一个新函数,名为 arc4random_uniform 。无论上限如何,它都会产生均匀分布的随机数 - 而且使用起来非常简单。
使用上面的示例,我建议您尝试生成这样的随机数:
int value = low_bound + arc4random_uniform(width + 1);
答案 1 :(得分:2)
int low_bound = 3;
int high_bound = 7;
int width = high_bound - low_bound; // 4
int value = low_bound + arc4random() % (width + 1); // 3 + 0..4
另外阅读字段中的边界,例如bound = [[field text] intValue]
。
如果您在将输入字段连接到代码时遇到问题,则应阅读一些Cocoa教程。有几种方法可以做到,最简单的方法之一是为控制器类中的文本字段声明属性:
@interface Controller : UIViewController {}
@property(retain) IBOutlet UITextField *lowerBoundField;
@property(retain) IBOutlet UITextField *upperBoundField;
@end
然后,您可以将Interface Builder中的文本字段连接到这些插座,并使用以下代码处理它们:
- (void) generateNumber {
int lowerBound = [[lowerBoundField text] intValue];
…
}
这假设我们正在谈论Cocoa Touch。在桌面Cocoa中情况类似,只是细节会有所不同。