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;
  }
}

これを修正する方法を知っている人はいますか?または別の方法がありますか?

PS表示されたエラーは次のとおりです。

int から id への暗黙的な変換は ARC では許可されていません

結果型 ID を持つ関数から int を返す互換性のない整数からポインターへの変換

前もって感謝します。

編集:

このように機能します。ありがとうございました:)

編集:

私は解決するのが難しい新しい問題を抱えています:

これにより、エラーが発生します > トレッド 1 exc 悪いアクセス コード = 2

4

3 に答える 3

3

に変更-makebigger:(int)heightnr- (int)makebigger:(int)heightnrます。

戻り値の型を指定する必要があります。

また、条件が true の場合も何かを返す必要があります。


今まで、戻り値のない型を使用できることさえ知りませんでした。しかし、どうやらそうです。

于 2012-11-19T08:50:26.687 に答える
2

scoreが型のインスタンス変数であると仮定するとint、コードに 2 つのエラーがあります。まず、メソッドの戻り値の型を指定する必要があります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;
}
于 2012-11-19T08:59:55.773 に答える
0

あなたの「スコア」変数はNSNumberであると推測します。NSNumber(オブジェクト)をintと比較しようとしているため、コンパイラが文句を言っています。

これを試して:

 if([score intValue] > heightnr)
于 2012-11-19T08:48:30.693 に答える