Iphone 为什么我的代码不起作用?(带返回的重复循环)
我不知道为什么这个代码不起作用。关于它的整个想法是使价值更大,直到它大于分数Iphone 为什么我的代码不起作用?(带返回的重复循环),iphone,objective-c,xcode,Iphone,Objective C,Xcode,我不知道为什么这个代码不起作用。关于它的整个想法是使价值更大,直到它大于分数 if(score > height && rocketlaunch == false) { @try { height = [self makebigger:height]; } @catch (NSException *exception) { height = height + 4000; } upgr
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;
}
}
有人知道如何解决这个问题吗?还是有别的办法
附言。
显示的错误为:
ARC不允许将int隐式转换为id
及
从结果类型为id的函数返回int的不兼容整数到指针转换
先谢谢你
编辑:
它是这样工作的,非常感谢:)
编辑:
我遇到了一个很难解决的新问题:
这就产生了错误>tread 1 exc bad acces code=2我猜您的“score”变量是一个NSNumber。编译器正在抱怨,因为您试图将NSNumber(对象)与int进行比较 试试这个:
if([score intValue] > heightnr)
我将猜测您的“score”变量是一个NSNumber。编译器正在抱怨,因为您试图将NSNumber(对象)与int进行比较 试试这个:
if([score intValue] > heightnr)
将-makebiger:(int)heightnr
更改为-(int)makebiger:(int)heightnr
您必须指定返回类型
如果条件为真,你也必须返回一些东西
直到现在,我甚至不知道可以使用无返回类型。但显然是这样。将
-makebiger:(int)heightnr
更改为-(int)makebiger:(int)heightnr
您必须指定返回类型
如果条件为真,你也必须返回一些东西
直到现在,我甚至不知道可以使用无返回类型。但显然是这样。假设
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;
}
假设
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;
}
什么类型的变量返回您的方法?如果我读了声明,我不知道,如果我在返回后读,它是一个整数…什么样的变量会返回你的方法?如果我阅读声明,我不知道,如果我在返回后阅读,它是一个整数…对于这个响应,它是有效的,但我不希望它在为真时返回,那么你知道如何在不给出错误的情况下修复它吗?你不必做
int a=[self-makebiger:heightnr]
,你可以做一个简单的[self-makebiger:heightnr]
,返回值将消失。对于这个响应,它是有效的,但我不希望它在为真时返回,所以您知道如何在不给出错误的情况下修复它吗?您不必执行int a=[self makebiger:heightnr]
,您可以执行一个简单的[self makebiger:heightnr]
,返回值将消失。