为什么我的代码不起作用? (重复循环返回)

时间:2012-11-19 08:45:32

标签: iphone objective-c xcode

我不知道为什么这段代码不起作用。关于它的整个想法是让价值更大,直到它大于分数。

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

  

ARC

不允许将int隐式转换为id

  

不兼容的整数到指针转换从结果类型为id

的函数返回int

提前谢谢。

编辑:

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

编辑:

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

这给出了错误>胎面1错误的接入码= 2

3 个答案:

答案 0 :(得分:3)

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

您必须指定返回类型。

如果情况属实,你必须返回一些东西。


到目前为止,我甚至不知道可以使用无返回类型。但显然是。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

我打算猜测你的“得分”变量是一个NSNumber。编译器抱怨,因为您正在尝试将NSNumber(对象)与int进行比较。

试试这个:

 if([score intValue] > heightnr)