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显示的错误是:

ARC 不允许将 int 隐式转换为 id

从具有结果类型 id 的函数返回 int 的不兼容整数到指针转换

先感谢您。

编辑:

它以这种方式工作非常感谢你:)

编辑:

我遇到了一个难以解决的新问题:

这给出了错误>tread 1 exc bad accesses code = 2

4

3 回答 3

3

更改-makebigger:(int)heightnr- (int)makebigger:(int)heightnr.

您必须指定返回类型。

如果条件为真,你也必须返回一些东西。


直到现在我什至不知道可以使用无返回类型。但显然它是。

于 2012-11-19T08:50:26.687 回答
2

假设score是一个类型的实例变量,int那么您的代码中有两个错误:首先您必须指定方法的返回类型,否则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 回答