讓我們從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
更高的數字,否則,將永遠不會返回"missingno"
。
你認爲'random.Next();'可以產生什麼數字?編輯:好的,你編輯了沒有參數的'Next()'調用。 –
除了下面幾乎可以解釋這個問題的所有答案之外,每次調用該方法時,您可能都不應該創建一個Random的新實例 – SpaceghostAli
您每次調用時都會重新創建隨機類,它將以相同的種子開始並重新開始。所以它會一直返回相同的順序,但只能選擇第一個。 (請參閱我的回答) –