Ich habe diese Methode:
- (float)randomFloatBetween:(float)num1 andLargerFloat:(float)num2 {
return ((float)arc4random() / ARC4RANDOM_MAX) * num2-num1 + num1;
}
Und ich bin gespannt, ob es so ist ist möglich, anstelle von Bedingungen für Folgendes zu verwenden: Ich möchte ein zufälliges Float wie folgt erstellen:
When the score is:
Score 0-20: I want a float between 4.0-4.5 using the above method
Score 21-40: I want a float between 3.0-3.5 using the above method
Score 41-60: I want a float between 2.5-3.0 using the above method
Score 61+: I want a float between 2.0-2.5 using the above method
< Jetzt weiß ich, dass ich Konditionale verwenden kann, aber gibt es irgendeine mathematische Gleichung, die einfacher wäre als das?
Danke!
Edit1:
- (float)determineFloat {
if (score <= 60)
{
//Gets the tens place digit, asserting >= 0.
int f = fmax(floor( (score - 1) / 10 ), 0);
switch (f)
{
case 0:
case 1:
{
// return float between 4.0 and 4.5
[self randomFloatBetween:4.0 andLargerFloat:4.5];
}
case 2:
case 3:
{
// return float between 3.0 and 3.5
[self randomFloatBetween:3 andLargerFloat:3.5];
}
case 4:
case 5:
{
// return float between 2.5 and 3.0
[self randomFloatBetween:2.5 andLargerFloat:3];
}
default:
{
return 0;
}
}
}
else
{
// return float between 2.0 and 2.5
[self randomFloatBetween:2.0 andLargerFloat:2.5];
}
return;
}
Wie? Sind Sie sicher, dass dies der effizienteste Weg ist, dies zu tun?
Wahrscheinlich nicht, da die Beziehung nicht stetig ist. Wenn Sie diese Art von Anforderung haben, ist es besser, nur Bedingungswerte oder eine switch-Anweisung zu verwenden. Sie und alle, die den Code lesen oder debuggen, wissen dann genau, was die Funktion tut. Die Verwendung einer mathematischen Funktion, die im besten Fall äußerst kompliziert wäre, wird den Prozess wahrscheinlich verlangsamen.
Möglichkeit der Verwendung eines Schalters:
-(float)determineFloat:(float)score
{
if (score <= 60)
{
//Gets the tens place digit, asserting >= 0.
int f = (int)fmax(floor( (score - 1) / 10.0f ), 0);
switch (f)
{
case 0:
case 1:
{
return [self randomFloatBetween:4.0 andLargerFloat:4.5];
}
case 2:
case 3:
{
return [self randomFloatBetween:3.0 andLargerFloat:3.5];
}
case 4:
case 5:
{
return [self randomFloatBetween:2.5 andLargerFloat:3.0];
}
default:
{
return 0;
}
}
}
else
{
return [self randomFloatBetween:2.0 andLargerFloat:2.5];
}
}
Verwendung:
float myScore = 33;
float randomFloat = [self determineFloat:myScore];
Nun ist randomFloat
ein Wert zwischen 3 und 3,5.