2014-11-07 2 views
0

Ok так что это код, который я до сих пор:Выбор случайным образом между двумя объектами на основе результатов выбора случайным образом между двумя объектами

x = arc4random_uniform(4); 
    if (x <= 1){ 
     LabelA.text = [NSString stringWithFormat:@"1"]; 
    } else { 
     LabelA.text = [NSString stringWithFormat:@"2"]; 
    } 


{ 
    x = arc4random_uniform(12); 
    if (x <= 3){ 
     LabelB.text = [NSString stringWithFormat:@"3"]; 
    } else { 
     LabelB.text = [NSString stringWithFormat:@"4"]; 
    } 
} 

Итак, что это будет сделать, это выбрать 1 или 2 случайным образом и затем 3 или 4 случайным образом. Поэтому скажите, что он выбирает 1 и 3. Затем я хочу, чтобы он случайным образом выбирал между 1 и 3. И если он выбирает 1 и 3, я хочу, чтобы он выбирал 1 20% времени, но если он выбирает 2 и 3, я хочу, чтобы это выбрать 2 70% времени. Таким образом, для каждого матчапе было бы:

  • 1 и 3: Выберите 1 20% времени
  • 1 и 4: Выберите 1 60% времени
  • 2 и 3: Выбрать 2 70% времени
  • 2 и 4: Выберите 2 30% времени

и тогда любой номер он выбирает, я хочу, чтобы быть LabelC. Поэтому я в основном пытаюсь понять, как это кодировать. Надеюсь, это имеет смысл, и вы знаете, что я пытаюсь сделать, но любой совет будет полезен. Благодарю.

+0

FYI - избавиться от ненужных вызовов 'stringWithFormat:'. Например, просто «LabelA.text = @» 1 »;'. – rmaddy

ответ

1

Если у вас есть переменные х (равно 1 или 2) и у (быть 3 или 4), вы можете получить шансы вы хотите, как это так,

int z; 
if (x==1 && y==3) { 
    z= (arc4random_uniform(10) < 2)? 1:3; 

}else if (x==1 && y==4) { 
    z= (arc4random_uniform(10) < 6)? 1:4; 

}else if (x==2 && y==3) { 
    z= (arc4random_uniform(10) < 7)? 2:3; 

}else if (x==2 && y==4) { 
    z= (arc4random_uniform(10) < 3)? 2:4; 
+0

О, хорошо это имеет смысл, но как бы я сделал LabelC либо 1,2,3, либо 4? – bchesney

+0

@bchesney. В отличие от вашего вопроса, где у вас были строки, и поэтому не нужно было использовать stringWithFormat :, здесь у нас есть int (z), поэтому вам нужно использовать stringWithFormat: для создания строки для метки. labelC.text = [NSString stringWithFormat: @ "% d", z]; – rdelmar

+0

Ok gotcha спасибо за помощь – bchesney

0

версия с меньшим количеством if заявлений ...

int a[][3] = {{1,3,2},{1,4,6},{2,3,7},{2,4,3}}; 

int rand1 = arc4random_uniform(2); 
int rand2 = arc4random_uniform(12); 
int index = rand1 * 2 + rand2 > 3; 

int b = (arc4random_uniform(10)<a[index][2] ? a[index][0] : a[index][1]); 
LabelA.text = @(a[index][0]).stringValue; 
LabelB.text = @(a[index][1]).stringValue; 
LabelC.text = @(b).stringValue; 
+0

Этот ответ - хорошая идея, но это не сработает, потому что предполагает, что шансы одинаковы для первых двух чисел. Но соотношение для пары 3 и 4 равно 1 из 3, а не 1 из 2. – rmaddy

+0

@rmaddy вы правы. Я обновил свой ответ. Благодарю. – Epsilon

+0

Это для кода гольфа? :) –

Смежные вопросы