0

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

-(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 循环不起作用。它只检查一次。此外,每次检查时,它总是说“猜高”,而事实上,我猜高于计算机生成的数字。

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

4

2 回答 2

3

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

试试answerField.text.intValue

并且strNumber必须是一个整数才能工作,顺便说一句。

于 2012-12-24T02:24:06.760 回答
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!
    }
 }
于 2012-12-24T05:07:48.943 回答