Cocoa touch 输入随机数发生器

Cocoa touch 输入随机数发生器,cocoa-touch,random,numbers,Cocoa Touch,Random,Numbers,我是Xcode开发的新手,我想知道如何从2个输入中生成随机数 在IB中,我有两个文本字段(带数字键盘),指示要生成的数字的间隔(即从3到7)。我想知道我是如何从2个文本字段中获取输入的,以及如何从这些输入中生成随机数的方法 int low_bound = 3; int high_bound = 7; int width = high_bound - low_bound; // 4 int value = low_bound + arc4random() % (width + 1); // 3 +

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

在IB中,我有两个文本字段(带数字键盘),指示要生成的数字的间隔(即从3到7)。我想知道我是如何从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=[[fieldtext]intValue]


如果在将输入字段连接到代码时遇到问题,应该阅读一些Cocoa教程。有几种方法可以做到这一点,最简单的方法之一是为controller类中的文本字段声明属性:

@interface Controller : UIViewController {}
@property(retain) IBOutlet UITextField *lowerBoundField;
@property(retain) IBOutlet UITextField *upperBoundField;
@end
然后,您可以将Interface Builder中的文本字段连接到这些插座,并在如下代码中使用它们:

- (void) generateNumber {
    int lowerBound = [[lowerBoundField text] intValue];
    …
}
int value = low_bound + arc4random_uniform(width + 1);
这是假设我们正在谈论可可触摸。在桌面可可中,情况是相似的,只是细节会有所不同

再加上从字段中读取边界,类似于
bound=[[fieldtext]intValue]


如果在将输入字段连接到代码时遇到问题,应该阅读一些Cocoa教程。有几种方法可以做到这一点,最简单的方法之一是为controller类中的文本字段声明属性:

@interface Controller : UIViewController {}
@property(retain) IBOutlet UITextField *lowerBoundField;
@property(retain) IBOutlet UITextField *upperBoundField;
@end
然后,您可以将Interface Builder中的文本字段连接到这些插座,并在如下代码中使用它们:

- (void) generateNumber {
    int lowerBound = [[lowerBoundField text] intValue];
    …
}
int value = low_bound + arc4random_uniform(width + 1);

这是假设我们正在谈论可可触摸。在桌面Cocoa中,情况类似,只是细节不同。

在尝试生成真正的随机数时,涉及到许多问题。例如,请注意,诸如rand()和random()之类的函数会根据“种子值”生成数字序列。这意味着,如果种子值相同,则生成的数字序列将相同。使用“随机”种子有多种方法——即使用当前日期和时间——但这些方法的可靠性和安全性值得怀疑

随着数字生成器的发展,这些问题得到了解决,因此后面的生成器通常比前面的生成器更好:rand通常不像random那样随机,random也不像arc4random那样随机

arc4random()目前的问题(在其手册页中有记录)是,如果上限不是偶数,则使用模数计算(如“arc4random()%上限”)可能会引入统计偏差。因此,向arc4random系列添加了一个新函数,称为arc4random\u uniform。它产生均匀分布的随机数,不管上限是多少,而且使用起来非常简单

使用上述示例,我建议您尝试生成如下随机数:

- (void) generateNumber {
    int lowerBound = [[lowerBoundField text] intValue];
    …
}
int value = low_bound + arc4random_uniform(width + 1);

试图生成一个真正的随机数涉及到许多问题。例如,请注意,诸如rand()和random()之类的函数会根据“种子值”生成数字序列。这意味着,如果种子值相同,则生成的数字序列将相同。使用“随机”种子有多种方法——即使用当前日期和时间——但这些方法的可靠性和安全性值得怀疑

随着数字生成器的发展,这些问题得到了解决,因此后面的生成器通常比前面的生成器更好:rand通常不像random那样随机,random也不像arc4random那样随机

arc4random()目前的问题(在其手册页中有记录)是,如果上限不是偶数,则使用模数计算(如“arc4random()%上限”)可能会引入统计偏差。因此,向arc4random系列添加了一个新函数,称为arc4random\u uniform。它产生均匀分布的随机数,不管上限是多少,而且使用起来非常简单

使用上述示例,我建议您尝试生成如下随机数:

- (void) generateNumber {
    int lowerBound = [[lowerBoundField text] intValue];
    …
}
int value = low_bound + arc4random_uniform(width + 1);

我被输入部分卡住了。我无法接受textFieldA内容的低限制。怎么做?如果我使用您插入的代码来读取边界,它会显示“预期标识符”非常感谢,我会测试它。我试着阅读一些关于文本字段的教程,但可能是我搜索了错误的主题。谢谢你的帮助和时间!不客气。如果你试了一次,还是想不出来的话,请回来。我被输入部分卡住了。我无法接受textFieldA内容的低限制。怎么做?如果我使用您插入的代码来读取边界,它会显示“预期标识符”非常感谢,我会测试它。我试着阅读一些关于文本字段的教程,但可能是我搜索了错误的主题。谢谢你的帮助和时间!不客气。如果你试了一下,还是想不出来,就回来吧。