我不知道为什么这段代码不起作用。关于它的整个想法是让价值更大,直到它大于分数。
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
答案 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)