For Loop不起作用

时间:2012-12-24 02:01:44

标签: objective-c for-loop uialertview

我正在尝试为学校制作一个猜测应用程序。

-(IBAction)check:(id)sender
{
    if (answerField.text.length > 0)
    {
        [self number];
    }
    else
    {
        UIAlertView *error = [[UIAlertView alloc]
                              initWithTitle:@"Error"
                              message:@"Please type in more than one chracter"
                              delegate:self
                              cancelButtonTitle:@"Okay!"
                              otherButtonTitles:nil];

        [error show];
    }
}
-(void)number
{

    for (int i = 0; i < 100; i++)
    {
        if (answerField.text > strNumber)
        {

            hlLabel.text = @"Guess Lower";
            answerField.text = @"";
        }
        if (answerField.text < strNumber)
        {

            hlLabel.text = @"Guess Higher";
            answerField.text = @"";
        }
    }


}

问题: for循环不起作用。它只检查一次。此外,每次检查时,它总是说“猜高”,实际上,我猜想高于计算机产生的数字。

其他信息:我有一个方法,每次我从文本字段点击键盘时,都会检查数字方法。

2 个答案:

答案 0 :(得分:3)

answerField.text正在返回NSString,而不是数字。

尝试answerField.text.intValue

strNumber必须是一个整数才能正常工作,顺便说一下。

答案 1 :(得分:0)

我花了一些时间来了解你想要做什么。但我怀疑你只是想让一个用户在一个字段中输入一些数字来猜测最多100次尝试的数字。这样的事情。

但for循环不是你如何让用户重试某些东西。你需要的是保存在物体中的一些状态(即一个ivar),它计算每次尝试的次数。

这里的第二个问题是,你似乎在数字上比较在这里没有意义的字符串。您想要比较数值

所以你的程序可能会像:

-(IBAction)check:(id)sender
{
    if (answerField.text.length > 0)
    {
        [self checkFieldValueAgainstCorrectAnswer]; // use better naming
    }
    else
    {
        UIAlertView *error = [[UIAlertView alloc]
                              initWithTitle:@"Error"
                              message:@"Please type in more than one chracter"
                              delegate:self
                              cancelButtonTitle:@"Okay!"
                              otherButtonTitles:nil];

        [error show];
    }
}

-(void)checkFieldValueAgainstCorrectAnswer
{
    NSUInteger fieldValue = [answerField.text unsignedIntegerValue];
    NSUInteger correctValue = [strNumber unsignedIntegerValue];
    if (fieldValue > correctValue) {
        // guess lower
    } else if(fieldValue < correctValue) {
        // guess higher
    } else {
        // you won!
        return;
    }
    answerField.text = @"";
    attempts++;
    if (attempts > 100) {
        // Too many attemps, you lost!
    }
 }