在我的應用程序,你會得到一個啓動按鈕第一,當你點擊「開始」,應用程序將隨機0到23之間的整數fraga1-fraga40(這將被用作問題)。 fraga1到fraga12不能相同。 fraga1到fraga12不能相同。 fraga13到fraga22不能是相同的。 fraga23到fraga28的 不能相同。 fraga29與fraga40不能相同。 fraga29與fraga40不能相同。模擬器凍結在arc4random法
然後過了一段時間,你就會得到一個啓動按鈕..當你按下一個,fraga41-fraga81將隨機23.介於0和 fraga41到fraga52不能成爲same.`` fraga53到fraga62不能相同。 fraga63到fraga68不能相同。 fraga69到fraga80的 不能相同。
但是當你點擊開始按鈕,第二次,按鍵則保持「點擊」(或「突出」)和應用程序模擬器凍結。
我用這樣的代碼...
-(void) v1
{
fraga1=arc4random()%24;
[self v2];
}
-(void) v2
{
fraga2=arc4random()%24;
if(fraga2==fraga1)
{
[self v2];
}
[self v3];
}
-(void) v3
{
fraga3=arc4random()%24;
if(fraga3==fraga2||fraga3==fraga1)
{
[self v3];
}
[self v4];
}
一路40從第一個按鈕...從V41到V80從另一個按鈕!
你覺得我能解決這個問題?我應該改變我的隨機問題策略嗎?
我曾試圖改變它,所以它會隨機像30個號碼,但它仍然是一樣的..當我試圖像100號上的每個問題..它的工作原理,但那種慢!
在此先感謝!
/一個小白
編輯: 我這樣做,但每弗拉加被設置爲0:
void fillUniqueRand(uint32_t arr[], uint32_t l, uint32_t n)
{ uint32_t的中,IL = 0;
for(in = 0; in < n && il < l; ++in)
{
uint32_t rn = n - in;
uint32_t rl = l - il;
if(arc4random() % rn < rl)
arr[il++] = in;
}
//We now have random numbers in order and
//need to shuffle them
uint32_t j, tmp;
for(uint32_t i = l - 1; i > 0; i--)
{
j = arc4random() % (i + 1);
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
} //從一個方法 調用此 - (無效)VNR { uint32_t的 fraga1,fraga2,fraga3,fraga4,fraga5,fraga6,fraga7,fraga8,fraga9,fraga10,fraga11,fraga12 ,fraga13,fraga14,fraga15,fraga16,fraga17,fraga18,fraga19,fraga20,fraga21,fraga22,// ... fraga23,fraga24,fraga25,fraga26,fraga27,fraga28,fraga29,fraga30,fraga31,fraga32,fraga33,fraga34 ,fraga35,fraga36,fraga37,fraga38,fraga39,fraga40; //,... ;
//Max fraga range I noticed was 12
uint32_t unique[12] = { 0 };
fillUniqueRand(unique, 12u, 24u);
fraga1 = unique[0];
fraga2 = unique[1];
fraga3 = unique[2];
fraga4 = unique[3];
fraga5 = unique[4];
fraga6 = unique[5];
fraga7 = unique[6];
fraga8 = unique[7];
fraga9 = unique[8];
fraga10 = unique[9];
fraga11 = unique[10];
fraga12 = unique[11];
//...
fillUniqueRand(unique, 10, 24u);
fraga13 = unique[0];
fraga14 = unique[1];
fraga15 = unique[2];
fraga16 = unique[3];
fraga17 = unique[4];
fraga18 = unique[5];
fraga19 = unique[6];
fraga20 = unique[7];
fraga21 = unique[8];
fraga22 = unique[9];
//Only 6 elements between fraga23-fraga28
fillUniqueRand(unique, 6, 21u);
fraga23 = unique[0];
fraga24 = unique[1];
fraga25 = unique[2];
fraga26 = unique[3];
fraga27 = unique[4];
fraga28 = unique[5];
fillUniqueRand(unique, 12u, 24u);
fraga29 = unique[0];
fraga30 = unique[1];
fraga31 = unique[2];
fraga32 = unique[3];
fraga33 = unique[4];
fraga34 = unique[5];
fraga35 = unique[6];
fraga36 = unique[7];
fraga37 = unique[8];
fraga38 = unique[9];
fraga39 = unique[10];
fraga40 = unique[11];
//...
//You get the picture
}
1.是改變你的策略2.如果暫停時就停止在哪一行調試器? – Joe
我看不到它是什麼行:O或者我怎麼能看到它? :O – Mangy92
你能推薦一個策略嗎?我會很高興! :) – Mangy92