这是我的代码:
-(void)randommoves
{
NSArray *possiblemoves =[NSArray arrayWithObjects:@"R ",@"R' ",@"L ",@"L' ",@"B ",@"B' ",@"F ",@"F' ",@"U ",@"U' ",@"D ",@"D' ", nil];
NSMutableString *finalmoves = [[NSMutableString alloc] init];
finalmoves = [NSMutableString stringWithCapacity:0];
[finalmoves retain];
int i = 0;
for (i=0; i<20; i++) {
int r = rand() % 13;
NSString *string = [possiblemoves objectAtIndex:r];
[finalmoves appendString:string];
}
NSLog(@"%@",finalmoves);
[finalmoves release];
}
每次我跑的时候都会得到完全相同的字符串“D'B B'D L'D'F'L'B'U'D D'L'U R B F D'B'”
我想要它做的是每次运行时都给我一个新动作
我已经跑了至少30次,以确保它不是侥幸,并且它确实返回相同的字符串,果然,确实如此。
答案 0 :(得分:5)
您需要确保首先为随机数生成器播种。
在进入你的循环之前执行:
srand(time(NULL));
答案 1 :(得分:1)
请注意,您要创建finalMoves
两次。一次使用[[NSMutableString alloc] init]
,然后再使用[NSMutableString stringWithCapacity:0]
。这意味着你正在泄漏记忆。
如何清理这样的代码:
static NSArray* sPossibleMoves = nil;
+ (void) initialize
{
sPossibleMoves = [[NSArray arrayWithObjects: @"R ",@"R' ",@"L ",@"L' ",@"B ",@"B' ",@"F ",
@"F' ",@"U ",@"U' ",@"D ",@"D' ", nil] retain];
}
- (void) randomMoves
{
NSMutableString* finalmoves = [NSMutableString stringWithCapacity: 20];
if (finalMoves != nil) {
for (int i = 0; i < 20; i++) {
[finalMoves appendString: [sPossibleMoves objectAtIndex:
(rand() % [sPossibleMoves count])]];
}
NSLog(@"%@",finalmoves);
}
}
假设您经常调用它,那么在全局中保持可能的移动是有意义的(因为Objective-C缺少类变量)