让我们从随机数生成器Random
开始。为了有效,您应该只实例化一次Random
。要做到这一点,您可以为类创建一个静态实例。如果您不这样做,每次调用random.Next()
都可能得到相同的数字。
public class PokemonChooser
{
private static Random random = new Random();
public static string ChoosePokemon() { ... }
}
然后,我们需要认识到random.Next()返回的是任何非负整数值,而不仅仅是您想要的那些。因此,我们需要将结果四舍五入为对您的情况有用的内容。由于您希望从中随机选择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名称很明显,我们可以删除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";
}
如果我们无法通过编号找到 Pokemon,则只需返回"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();
然而,你可能想要选择比random.Next() % 3
中的3
更高的数字,否则,"missingno"
永远不会被返回。
random.Next();
可以产生哪些数字?编辑:好吧,你删掉了没有参数的Next()
调用。 - Jeppe Stig Nielsen