0

3 つのボタンがあるアプリケーションがあり、ボタンを押すと 3 つのボタンのボタン イメージが変わりますが、ボタン 2 とボタン 3 はボタン 1 と同じ画像を持たない場合があり、ボタン 3 はボタン 2 と同じ画像を持たない場合があります。

私はこれを試しましたが、うまくいきませんでした

       NSInteger imageIndex1 = arc4random_uniform(images.count);
       NSInteger imageIndex2 = arc4random_uniform(images.count);
       NSInteger imageIndex3 = arc4random_uniform(images.count);

    if (imageIndex1 == imageIndex2 ) {
        imageIndex2 = arc4random_uniform(images.count);
    }

    else if (imageIndex1 == imageIndex3  ) {
        imageIndex3 = arc4random_uniform(images.count);
    }

        else if (imageIndex2 == imageIndex3  ) {
            imageIndex3 = arc4random_uniform(images.count);

    }



    else
       [self.picture1 setImage:images[imageIndex1] forState:UIControlStateNormal];
       [self.picture2 setImage:images[imageIndex2] forState:UIControlStateNormal];
       [self.picture3 setImage:images[imageIndex3] forState:UIControlStateNormal];
      imageIndex1 = imageIndex2;
      imageIndex1 = imageIndex3;
      imageIndex2 = imageIndex3;
4

5 に答える 5

0

私は解決策を見つけたと思います。これが今のコードです:

    Boolean p1 =true;
    Boolean p2 = true;
    Boolean p3 = true;


       NSInteger imageIndex1 = arc4random_uniform(images.count);
       NSInteger imageIndex2 = arc4random_uniform(images.count);
       NSInteger imageIndex3 = arc4random_uniform(images.count);

    if (imageIndex1 == imageIndex2 ) {
        p1 = false;
        imageIndex2 = arc4random_uniform(images.count);

    }

    if(imageIndex1 == imageIndex3  ) {
        p2 = false;
        imageIndex1 = arc4random_uniform(images.count);

    }

       if (imageIndex2 == imageIndex3  ) {
           p3 = false;
            imageIndex3 = arc4random_uniform(images.count);


    }



    if(p1 == true && p2 == true && p3 == true) {
       [self.picture1 setImage:images[imageIndex1] forState:UIControlStateNormal];
       [self.picture2 setImage:images[imageIndex2] forState:UIControlStateNormal];
       [self.picture3 setImage:images[imageIndex3] forState:UIControlStateNormal];
    }
于 2012-12-12T14:36:26.460 に答える
0

これの他のコピーは重複として閉じられたようです。その答えは次のとおりです。質問の目的は、ボタンの画像をランダムに変更することです。しかし、問題は、画像の配列にランダムなインデックスを選択すると、現在のインデックスが生成される場合があることです (これはランダムであるため、1/array.count の確率で発生します)。これは、特定のインデックスを除外するアプローチです...

- (NSUInteger)randomUnsignedLessThan:(NSInteger)max excluding:(NSUInteger)exclude {

    NSInteger firstTry = -1;
    while (firstTry == exclude) firstTry = arc4random() % max;
    return firstTry;
}

このアプローチでは常に arc4random が 1 回呼び出され、1/max^N の確率で 1+N 回の呼び出しが必要になることに注意してください。そのため、範囲が狭く、高いパフォーマンスが必要な場合は、別のアルゴリズムを使用して 1 つのインデックスを除外することを検討してください。

于 2012-12-20T15:51:50.777 に答える
0

これを試して:

NSInteger imageIndex1 = arc4random_uniform(images.count);
NSInteger imageIndex2 = arc4random_uniform(images.count);
NSInteger imageIndex3 = arc4random_uniform(images.count);

while (imageIndex2 == imageIndex1 ) {
    imageIndex2 = arc4random_uniform(images.count);
}

while (imageIndex3 == imageIndex1 ) {
    imageIndex3 = arc4random_uniform(images.count);
}


[self.picture1 setImage:images[imageIndex1] forState:UIControlStateNormal];
[self.picture2 setImage:images[imageIndex2] forState:UIControlStateNormal];
[self.picture3 setImage:images[imageIndex3] forState:UIControlStateNormal];
于 2012-12-12T12:59:22.943 に答える
0

ここではself.picture1、else 部分に画像を設定するため、最初にいずれかの条件が true の場合、画像は設定されないため、この問題に直面しているため、部分self.picture1外のすべてのボタンに setImage のコードを追加します。次のコードelse

       [self.picture1 setImage:images[imageIndex1] forState:UIControlStateNormal];
       [self.picture2 setImage:images[imageIndex2] forState:UIControlStateNormal];
       [self.picture3 setImage:images[imageIndex3] forState:UIControlStateNormal];
于 2012-12-12T12:56:04.893 に答える
0

これを試して...

 if (imageIndex2 == imageIndex1 ) {
            imageIndex2 = arc4random_uniform(images.count);
    }

    if (imageIndex3 == imageIndex1 ) {
            imageIndex3 = arc4random_uniform(images.count);
          }


[self.picture1 setImage:images[imageIndex1] forState:UIControlStateNormal];
       [self.picture2 setImage:images[imageIndex2] forState:UIControlStateNormal];
       [self.picture3 setImage:images[imageIndex3] forState:UIControlStateNormal];
       imageIndex1 = imageIndex2;
       imageInde

x1 = imageIndex3;
于 2012-12-12T12:57:43.640 に答える