2011-06-02 61 views
1

我是Xcode开发新手,我想知道如何从2个输入生成随机数。从输入的随机数发生器

在IB中,我有2个textfields(数字小键盘),用于指示要生成的数字的间隔(即从3到7)。我想知道我是如何从2个文本字段获取输入的,并执行从这些输入生成随机数的方法。

回答

5

还有很多涉及试图产生一个真正的随机数的问题。请注意,例如,函数如rand()random()基于'种子值'生成数字序列。这意味着如果种子值相同,则生成的数字序列将是相同的。有多种方法可以使用“随机”种子 - 即使用当前的日期和时间 - 但这些方法的可靠性和安全性值得怀疑。

随着数生成器的发展,这些问题得到解决,因此后来的发电机通常比前者更好:兰特一般不作随机是随机的,随机并不像随机arc4random

目前的问题与arc4random(),这是在其手册页记载,是使用一个模数计算 - 如在“arc4random()%UPPER_LIMIT” - 可以引入统计偏差,如果UPPER_LIMIT不是连数。正因为如此,Arc4random系列新增了一个新功能,名为arc4random_uniform。它产生均匀分布的随机数,而不管上限如何 - 并且使用起来非常简单。

使用你上面的例子,我建议你尝试产生这样的随机数:

int value = low_bound + arc4random_uniform(width + 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]; 
    … 
} 

这是假设我们正在谈论可可触摸。在桌面可可的情况是相似的,只是细节会​​有所不同。

+0

我被困在输入部分。我无法使用textFieldA内容的low_bound。怎么做?如果我使用您插入的代码来读取边界,它会显示“预计的标识符” – Phillip 2011-06-02 15:55:07

+0

非常感谢,我会对它进行测试。我尝试阅读一些教程的布特文本框,但也许我正在寻找错误的主题。感谢您的帮助和时间! – Phillip 2011-06-02 19:27:28

+0

不客气。回来,如果你试试看,仍然无法弄清楚。 – zoul 2011-06-02 19:30:16