0

痛みを計算するためのアルゴリズムに問題があります。ユーザーがUITextFieldに単語を入力し、その単語が配列内の文字列(@ "The Word")と一致する場合、int'score'に1が加算されます。

次に、ユーザーが単語を正しく理解すると、intスコアがラベルとして設定されます。(スコアの表示)

問題は、ユーザーが同じ単語を何度も何度も入力し続けることができ、スコアが1つ上がり続けることです。単語がすでに入力されているかどうかを知るためのコマンドがあるので、単語は1回しか使用できません。

コード

 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

与えられた(正しい)答えを格納する2番目の配列を保持してみませんか。これは、問題が解決された場合に、内部に封じ込めを行うことができます。

2番目のオプションは、文字列を配列に配置するのではなく、「Answer」オブジェクトを配置することです。このオブジェクトには、すでに使用済みとしてフラグを立てることができるフィールドがあります。

于 2012-10-15T18:54:12.627 に答える
0

NSMutableSetを作成し、単語が入力されるたびにそのコピーをそこに置くことができます。次に、スコアをインクリメントする前に、単語がセットに存在するかどうかを確認する必要があります。

ハッシュアクセスを使用しているため、ルックアップが高速であるセットを提案しています。また、同じ文字列を複数回追加した場合でも、セットには文字列への参照が1つだけあります。

于 2012-10-15T18:55:18.543 に答える
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;
}

(単語が多い場合は、NSMutableArrayの代わりにNSMutableSetを使用すると効率が向上しますが、ロジックは同じです。)

于 2012-10-15T18:55:37.823 に答える