2012-11-19 112 views
1

我不知道爲什麼這段代碼不起作用。關於它的整個想法是讓價值更大,直到它大於分數。爲什麼我的代碼不工作? (重複循環返回)

if(score > height && rocketlaunch == false) 
{ 
    @try 
    { 
     height = [self makebigger:height]; 
    } 
    @catch (NSException *exception) 
    { 
     height = height + 4000; 
    } 
    upgradeRocket.center = CGPointMake((rand()%200), -50); 
    rocketlaunch = true; 
} 

-(int)makebigger:(int)heightnr { 
    heightnr = heightnr + (1000 * rand() %5); 
    if(score > heightnr) { 
    [self makebigger:heightnr]; 
    return heightnr; 
    } else { 
    return heightnr; 
    } 
} 

有誰知道如何解決這個問題?或者有另一種方法?

P.S.顯示 錯誤是:

INT爲ID的隱式轉換是不允許與ARC

不相容整數指針轉換從與結果類型ID

函數返回int

預先感謝您。

編輯:

是這樣工作的我非常感謝你:)

編輯:

我有難的新問題要解決:

這給誤差>胎面1不好的acces代碼= 2

+0

什麼樣的變量確實回報你方法 ? 如果我讀了宣言,我不知道,如果我在返回後閱讀,這是一個整數... – Larme

回答

3

變化-makebigger:(int)heightnr- (int)makebigger:(int)heightnr

您必須指定返回類型。

如果條件爲真,你必須返回一些東西。


直到現在我甚至不知道這是可能使用沒有返回類型。但顯然是這樣。

+0

Ty對於此響應有效,但我不希望它返回時它是真實的,所以你有一個想法如何解決,而不會給出錯誤? –

+0

你不必做一個'int a = [self makebigger:heightnr]',你可以做一個簡單的'[self makebigger:heightnr]',返回就會消失。 – Larme

0

我要猜測你的「分數」變量是一個NSNumber。編譯器正在抱怨,因爲你試圖將一個NSNumber(對象)與一個int進行比較。

試試這個:

if([score intValue] > heightnr) 
+0

沒有我的分數是一個整數。 –

2

假設scoreint類型的實例變量,那麼你有兩個錯誤在你的代碼:首先你必須指定的方法,否則id假定的返回類型;第二個路徑必須返回一個值,而遞歸調用不會這樣做。糾正那些給:

- (int)makebigger:(int)heightnr 
{ 
    heightnr = heightnr + (1000 * rand() %5); 
    if(score > heightnr) 
     return [self makebigger:heightnr]; 
    else 
     return heightnr; 
} 

雖然這應該是這樣簡單的基於價值的算法工作,更通常使用迭代而不是遞歸,如:

- (int)makebigger:(int)heightnr 
{ 
    while (score > heightnr) 
     heightnr = heightnr + (1000 * rand() %5); 

    return heightnr; 
}