2011-07-26 14 views
1

IBActionを作成する際に問題が発生し、各ケースをランダムな順序で一度呼び出します。
私は多くの検索を行いましたが、この問題については良い解決策を見つけることはできません。私が持っている コードは、これまでのところそれは正常に動作しますランダムにIBActionを選択すると、それぞれのケースが1回だけ選択されます。

-(IBAction) random { 
    int text = rand() % 5; 
    switch (text) {   
     case 0: 
      textview.text = @"1"; 
      break; 
     case 1: 
      textview.text = @"2"; 
      break; 
     case 2: 
      textview.text = @"3"; 
      break; 
     case 3: 
      textview.text = @"4"; 
      break; 
     case 4: 
      textview.text = @"5"; 
      break; 
     default: 
      break; 
    }  
} 

ですが、私が言ったように、私はそれが一度それぞれのケースを呼びたいです。
ご協力いただければ幸いです。

答えて

2

あなたはランダムなテキストを設定しようとしているので、私はこのようにそれを行うだろう:

IVARを追加しstringsArrayのようなものと呼ばれ、あなたのinitでそれを初期化します。

... 
stringsArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", nil]; 
... 

あなたのIBActionう次のようになります。

-(IBAction) random { 
    if([stringsArray count] == 0) return; 
    int text = rand() % [stringsArray count]; 
    [textView setText:[stringsArray objectAtIndex:text]; 
    [stringsArray removeObjectAtIndex:text]; 
} 
2

NSMutableArrayには、NSNumberのようにオプションを入れて、ランダムインデックスを選択して表示し、配列から削除します。カウントがゼロになると他の応答が返されます。

0

使用にsrand代わりランド機能の

またはそれ以上はまだ

int型のテキストを使用する= arc4random()%5。

0

「スコアカード」を保持し、すでに選択されているオプションをスキップする必要があります。スコアカードには、ビットマップ(ビットを設定する単純な整数など)、ブール値の配列、以前に選択した数値のリストなどがあります。

コードを書くのが最も簡単な方法です。上のあなたのロジックの本体をUNTILループでチェックし、乱数を選んだ後にループをチェックインして、それが既に選択されているかどうかを確認します。そうであれば、ループを繰り返し、そうでない場合はレスポンスを設定し、スコアカードに適切な「チェックマーク」を記入してループを抜けてください。

でも注意:ループには、すべてのオプションがすでに選択されているかどうかを確認するチェックが含まれている必要があります。

関連する問題