当变量数组位于同一个类中时,在全局作用域和局部作用域(在方法内)声明变量数组有什么区别?

问题描述 投票:0回答:1

这里是初学者。在全局作用域中声明数组并在与该数组位于同一类的方法中使用它,以及在全局作用域和方法中都声明数组有什么区别?第一种方法行不通,但第二种方法行得通,我找不到原因的答案。

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 根据动物的值被赋予正确的值,而动物被赋予空字符串),但是 随着它的进展,它将重复动物数组中已经为空的值。而第二个,只需在方法内声明数组(即使它是在全局范围内声明的,与方法内的数组相同的类、相同的名称)它就起作用了,我无法解释如何

c#
1个回答
0
投票

您的洗牌算法假设有两个数组。但在第一个变体中,

pettingZoo
animals
是同一个数组。

© www.soinside.com 2019 - 2024. All rights reserved.