让我们从Random
数字生成器开始。为了有效,您应该只实例化Random
一次。为此,您可以为该类创建一个静态实例。如果您不这样做,则每次拨打电话时都可能会收到相同的号码random.Next()
。
public class PokemonChooser
{
private static Random random = new Random();
public static string ChoosePokemon() { ... }
}
然后,我们需要意识到random.Next()
返回任何非负值integer
,而不仅仅是您想要的值。因此,我们需要将结果四舍五入到对您的情况有用的值。由于您有 3 个项目要从中随机选择,我们可以使用模运算符 ( %
) 对其进行舍入,这基本上为您提供了除法运算的余数 ( /
)。例如:(int)(5 / 2) == 2
和5 % 2 == 1
。
var pokemonChosen = random.Next() % 3;
接下来,由于这个结果是从零开始的,我们需要在if
语句中说明这一点。
if (pokemonChosen == 0)
{
string pokemon = "Pidgey";
return pokemon;
}
if (pokemonChosen == 1)
{
string pokemon = "Charmander";
return pokemon;
}
if (pokemonChosen == 2)
{
string pokemon = "Geodude";
return pokemon;
}
由于口袋妖怪的名字很明显,我们可以去掉pokemon
变量而不会失去任何可读性。
if (pokemonChosen == 0)
{
return "Pidgey";
}
if (pokemonChosen == 1)
{
return "Charmander";
}
if (pokemonChosen == 2)
{
return "Geodude";
}
我们可以通过使用一个case
语句而不是多个if
语句来使这个更清晰和更短。
switch (pokemonChosen) {
case (0): return "Pidgey";
case (1): return "Charmander";
case (2): return "Geodude";
}
由于如果我们无法通过数字找到口袋妖怪,我们只是返回"missingno"
,我们可以使用默认情况:
switch (pokemonChosen) {
case (0): return "Pidgey";
case (1): return "Charmander";
case (2): return "Geodude";
default: return "missingno";
}
总而言之,我们最终得到:
public class PokemonChooser
{
private static Random random = new Random();
public static string ChoosePokemon()
{
var pokemonChosen = random.Next() % 3;
switch (pokemonChosen) {
case (0): return "Pidgey";
case (1): return "Charmander";
case (2): return "Geodude";
default: return "missingno";
}
}
}
我们像这样使用它:
var pokemon = PokemonChooser.ChoosePokemon();
但是,您可能希望选择比3
in更高的数字random.Next() % 3
,否则"missingno"
将永远不会返回。