2011-06-02 89 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