这里是初学者。在全局作用域中声明数组并在与该数组位于同一类的方法中使用它,以及在全局作用域和方法中都声明数组有什么区别?第一种方法行不通,但第二种方法行得通,我找不到原因的答案。
string[] pettingZoo =
{
"alpacas", "capybaras", "chickens", "ducks", "emus", "geese",
"goats", "iguanas", "kangaroos", "lemurs", "llamas", "macaws",
"ostriches", "pigs", "ponies", "rabbits", "sheep", "tortoises",
};
RandomizeAnimals(pettingZoo);
void RandomizeAnimals(string[] animals
{
Random random = new();
int randomNumber;
for (int i = 0; i < animals.Length; i++)
{
randomNumber = random.Next(0, animals.Length);
if (animals[randomNumber] == string.Empty)
{
for (int j = 0; j < animals.Length; j++)
{
if (animals[j] != string.Empty)
{
pettingZoo[i] = animals[j];
animals[j] = string.Empty;
break;
}
}
}
else
{
pettingZoo[i] = animals[randomNumber];
animals[randomNumber] = string.Empty;
}
Console.WriteLine(pettingZoo[i]);
}
}
RandomizeAnimals(pettingZoo);
void RandomizeAnimals(string[] animals)
{
string[] pettingZoo = new string[animals.Length];
Random random = new();
int randomNumber;
for (int i = 0; i < animals.Length; i++)
{
randomNumber = random.Next(0, animals.Length);
if (animals[randomNumber] == string.Empty)
{
for (int j = 0; j < animals.Length; j++)
{
if (animals[j] != string.Empty)
{
pettingZoo[i] = animals[j];
animals[j] = string.Empty;
break;
}
}
}
else
{
pettingZoo[i] = animals[randomNumber];
animals[randomNumber] = string.Empty;
}
Console.WriteLine(pettingZoo[i]);
}
}
我尝试了第一种方法,虽然第一次迭代似乎有效(pettingZoo 根据动物的值被赋予正确的值,而动物被赋予空字符串),但是 随着它的进展,它将重复动物数组中已经为空的值。而第二个,只需在方法内声明数组(即使它是在全局范围内声明的,与方法内的数组相同的类、相同的名称)它就起作用了,我无法解释如何
您的洗牌算法假设有两个数组。但在第一个变体中,
pettingZoo
和 animals
是同一个数组。