0

我的计算疮的算法有问题。用户在 UITextField 中输入一个单词,如果该单词与数组中的字符串 (@"The Word") 匹配,则 int 'score' 将加 1。

然后 int 分数被设置为标签,因为用户得到了正确的单词。(显示分数)

问题是,用户可以一遍又一遍地输入同一个单词,分数会不断上升。是否有一个命令可以知道是否已经输入了一个单词,所以你只能使用这个单词一次。

编码

 NSArray *scoreArray1 = [NSArray arrayWithObjects:
@"Word 1", @"Word 2", @"Word 3", nil];

NSString *inputtwo =_EnterNameText.text;
BOOL isItright = NO;
for(NSString *possible in scoreArray1) {
    if([inputtwo isEqual:possible] ) {
        isItright = YES;
        break;
    }
}

if(isItright) {

    static int myInt = 0;
    myInt++;
    NSString *score = [NSString stringWithFormat:@"%d", myInt];
    [_scorelabel setText:score];

}

更新!!!!!!

    NSArray *scoreArray1 = [NSArray arrayWithObjects:
@"Alan Shearer", @"Shearer", @"Andrew Cole", @"Andy Cole", @"Cole", @"Thierry Henry", @"Henry", @"Robbie Fowler", @"Fowler", @"Frank Lampard", @"Lampard", @"Michael Owen", @"Owen", nil];

NSSet *set2 = [NSSet setWithArray:scoreArray1];



NSString *inputtwo =_EnterNameText.text;
BOOL isItright = NO;
for(NSString *possible in set2) {
    if([inputtwo isEqual:possible] ) {
        isItright = YES;
        break;
    }
}

if(isItright) {

    static int myInt = 0;
    myInt++;
    NSString *score = [NSString stringWithFormat:@"%d", myInt];
    [_scorelabel setText:score];

}

但是现在该应用程序无法正常工作,它崩溃了,有什么建议吗?

4

3 回答 3

0

实际上,如果您有一个“合法”单词数组,那么要简单地删除每个被调用的单词,直到数组长度为零。

NSMutableArray* scoreArrayCopy = [NSMutableArray arrayWithArray:scoreArray];
int originalCount = scoreArrayCopy.count;
...
while (scoreArrayCopy.count > 0) {
   NSString* guess = <get next guess>;
   [scoreArrayCopy removeObject:guess];
   score = originalCount - scoreArrayCopy.count;
}

(如果你有很多单词,那么使用 NSMutableSet 而不是 NSMutableArray 会更有效,但逻辑是相同的。)

于 2012-10-15T18:55:37.823 回答
0

为什么不保留第二个数组来存储给定(正确)答案。有了这个,你可以在你的 if.... 里面做一个 contains 问题解决了。

第二种选择不是将字符串放入您的数组中,而是将“Answer”对象放入其中,您可以将其标记为已使用的字段。

于 2012-10-15T18:54:12.627 回答
0

您可以创建一个 NSMutableSet 并在输入单词时将单词的副本放入其中。然后你只需要在增加分数之前检查单词是否存在于集合中。

我建议使用一个集合,因为它使用散列访问,因此查找速度很快。此外,如果您多次添加相同的字符串,则该集合仍然只有一个对该字符串的引用。

于 2012-10-15T18:55:18.543 回答