0

我有一个应用程序,您有 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

看起来这个的另一个副本被关闭为重复。以下是该问题的答案:问题的目标是随机更改按钮上的图像。但问题是,在图像数组中选择随机索引有时会生成当前索引(它是随机的,因此发生这种情况的概率为 1/array.count)。这是一种排除给定索引的方法...

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

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

请注意,此方法将始终调用 arc4random 一次,并且需要 1+N 次调用,概率为 1/max^N,因此对于低范围和高性能要求,您可能会考虑使用不同的算法来排除一个索引。

于 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 部分,因此如果首先任何条件为真,则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 回答
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 回答