0

我创建了一个计数计时器(在标签上)和一个包含标签整数值的变量(命名为计数)。我还创建了一个函数来检查我的数字是 7,除以 7 还是包含 7。当我尝试将我的计数值传递给检查函数时,我的应用程序是堆栈。我尝试了很长时间来找出堆栈溢出发生的原因,但我没有成功。我该如何解决?这是我的代码:

-(IBAction)start:(id)sender
{
    timer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];

    MainInt = 0;
    numbersTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(countup) userInfo:nil repeats:YES]; 
}
-(void)countup
{
    MainInt += 1;
    numbersLabel.text = [NSString stringWithFormat:@"%i", MainInt];
    count = numbersLabel.text.intValue;
    NSLog(@"num: %d", count);

   if ([self checknum:(count) == false]) {
   NSLog(@"BOOM");
   }

}
-(BOOL)checknum:(int)number
{
    while (number<10) 
    {
        if(number ==7)
        {
            NSLog(@"boom, i=%d", number);
            return true;
        }


    }

    while (number>=10 && number<1000) 
    {
        if(number % 7 == 0)
        {
            NSLog(@"boom i=%d", number);
            return true;

        }

        if([self revese:(number)])
        {
            NSLog(@"boom reverse num = %d", number);
            return true;

        }

    }

    return false;   
}


-(BOOL) revese:(int)number
{
    if(number < 10 && number != 7)
        return false;
    if(((number % 10) == 7) || ((number / 10) == 7))
        return true;
    else {
        [self revese:(number / 10)];
    }
    return false;

}

谢谢!

4

3 回答 3

2

该声明

if ([self checknum:(count) == false]) {
   NSLog(@"BOOM");
}

是胡说八道。你问得很有效

BOOL isLessThanOne = (count < 1);
if ([self checksum:isLessThanOne]) {
           NSLog(@"BOOM");
}

将其更改为

if ([self checksum:count] == NO) {
       NSLog(@"BOOM");
    }
于 2012-06-30T09:55:11.993 回答
1

有很多问题,但首先是这些:

while (number<10) 

//

while (number>=10 && number<1000)

您需要一个 if/else 类型的条件语句。你现在的方式,因为你从不调整 的值number,如果你稍后在代码中测试的严格条件没有得到满足,你将陷入无限循环。更像是:

if(number<10){ 
// do some tests

} else if (number<1000){
// do some other tests


}

还有其他问题,但这些只是一个开始。

于 2012-06-30T09:23:00.647 回答
0

很难说,因为我无法真正看到你在做什么,但如果你有堆栈溢出,很可能你的问题revese是递归函数。我敢打赌,你有一个特定的值被传递给revese它,导致它被一遍又一遍地调用,基于你在条件语句中使用的一些不寻常的逻辑。您应该使用调试器仔细检查此功能,以确定发生这种情况的原因。

于 2012-06-30T09:26:44.723 回答