iphone开发-添加循环?
我需要帮助创建一个循环,检查数组中选定的项目之前是否已拾取,如果已拾取,请再次随机化。 在该功能中实现:iphone开发-添加循环?,iphone,Iphone,我需要帮助创建一个循环,检查数组中选定的项目之前是否已拾取,如果已拾取,请再次随机化。 在该功能中实现: -(NSString*) randomBallPick:(NSString*) Filename { NSMutableArray *imageArray = [[NSMutableArray alloc] init]; for (int c=0;c<37;c++) { NSString *imageName = [NSString string
-(NSString*) randomBallPick:(NSString*) Filename
{
NSMutableArray *imageArray = [[NSMutableArray alloc] init];
for (int c=0;c<37;c++)
{
NSString *imageName = [NSString stringWithFormat:@"image_%d.png", c];
[imageArray addObject: imageName];
}
int numFileNames = [imageArray count];
int chosen = arc4random() % numFileNames;
Filename = [imageArray objectAtIndex: chosen];
return Filename;
[imageArray release];
}
-(NSString*)随机选择:(NSString*)文件名
{
NSMutableArray*imageArray=[[NSMutableArray alloc]init];
对于(int c=0;c,您需要在某处存储是否已选择特定的球
拾取一个球后,如果之前已选择该球,请返回函数的开头并重试
请注意,这可能不是处理此问题的最佳方法-一旦您确定阵列中只有少数尚未拾取的球,您将花费大量时间重新拾取,直到获得新的球。更好的方法是维护尚未拾取的球的列表,并在拾取球时将其从列表中拼接出来
编辑:psuedocode循环版本,直到找到它的方法。您需要实现getIt()和Foo::hasNotBeenPickedYet(),并将其转换为实际代码
Foo foo = null;
while(!foo) {
Foo temp = getIt();
if(temp.hasNotBeenPickedYet())
foo = temp;
}
return foo;
我回答了您关于此函数的另一个问题:这里的答案修改为仅返回尚未返回的文件名:
- (NSString*)randomBallPick
{
static NSMutableArray *imageArray;
if (!imageArray) {
imageArray = [[NSMutableArray alloc] init];
for (int c = 0; c < 37; c++)
{
NSString *imageName = [NSString stringWithFormat:@"ball_%d.png", c];
[imageArray addObject:imageName];
}
}
//pick one filename
NSUInteger numFileNames = [imageArray count];
if (numFileNames < 1) {
return nil; // or handle this case in some other way
}
NSUInteger chosen = arc4random() % numFileNames;
NSString *chosenFilename = [imageArray objectAtIndex:chosen];
[imageArray removeObjectAtIndex:chosen];
return chosenFilename;
}
-(NSString*)随机球拾取
{
静态NSMutableArray*imageArray;
如果(!imageArray){
imageArray=[[NSMutableArray alloc]init];
对于(int c=0;c<37;c++)
{
NSString*imageName=[NSString stringWithFormat:@“ball_%d.png”,c];
[imageArray addObject:imageName];
}
}
//选择一个文件名
NSU整数numFileNames=[imageArray计数];
if(numFileNames<1){
返回nil;//或以其他方式处理此情况
}
NSUInteger selected=arc4random()%numFileNames;
NSString*chosenFilename=[imageArray objectAtIndex:Selected];
[imageArray removeObjectAtIndex:已选择];
返回chosenFilename;
}
基本上,当它返回一个文件名时,它也会将其从imageArray
中删除
当然,一旦imageArray
为空(numFileNames<1
),上述函数将返回nil
。不确定这是否合适,您可能需要以不同的方式处理该情况。仅对代码进行注释。[imageArray版本];永远不会接到电话。请将其放在您的回执声明之前。我不太明白,如何实施?(您必须原谅我,我是objective-c的新手)我不会有任何线索-我不是一个客观的C程序员。即使我是,我也不会给你复制粘贴的代码-如果你只是复制粘贴的东西,你什么也学不到。我已经向你展示了你需要做什么,这取决于你来制定这样做的语法。当我运行这段代码时,我会得到一个GDB错误信号EXC_BAD_ACCESS。非常感谢你的帮助。a你要在某个地方释放返回的NSString吗?你不应该。我不认为上面的代码会导致EXC_BAD_访问错误,但我已经直接在浏览器中键入了它,谁知道呢。也许我调用它是错误的?我是这样做的:NSString*temp=[self randomBallPick];upBall1.image=[UIImage ImageName:temp];这对我来说是正确的。也许其他人可以在我的代码中找到问题,或者它完全在其他地方。谢谢。继续这里