1

これが私のコードです:

-(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' DD D'L' URBFD'B'」が表示されます。

私がやりたいのは、実行するたびに新しいムーブセットをくれることです

これを少なくとも30回実行して、それがまぐれではないこと、そして実際に同じ文字列を返していることを確認しました。確かにそうです。

4

2 に答える 2

5

最初に乱数ジェネレーターをシードする必要があります。

ループに入る前に:

srand(time(NULL));
于 2010-02-07T03:13:54.060 に答える
1

2回作成していることに注意してください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にはクラス変数がないため)

于 2010-02-07T04:53:17.767 に答える