C#如何在方法中使用部分填充的数组?

时间:2017-04-02 16:23:03

标签: c# arrays

我的教练希望我们创建一个包含10个元素的数组,然后使用控制台输入用随机数填充它,然后将所有数字相乘以得到产品。我无法弄清楚如何将数组传递给方法然后成功获得产品。我是否使用for循环?我不认为我可以使用foreach循环,因为它可以部分填充。我如何将数组首先传递给方法?

这是我到目前为止将数值存储在数组中的原因。

for (int i = 0; i < SIZE; i++)
{

    bool valid = false;
    do
    {
         Write("Enter an integer value or 0 to stop ");
         string input = ReadLine();
         valid = int.TryParse(input, out userInput);
    } while (!valid);

    if (userInput == 0)
    {
         break;
    }
    array[i] = userInput;
}

product = p.ArrayProduct(array.Length);

3 个答案:

答案 0 :(得分:2)

乘法的方法如下:

public int ArrayProduct(int[] array)
{
   int p = 1;
   for(int i = 0; i < array.Length; i++)
   {
       p *= array[i];
   }
   return p;
}

您也可以在foreach循环中相乘:

public int ArrayProduct(int[] array)
{
   int p = 1;
   foreach(int element in array)
   {
       p *= element;
   }
   return p;
}

或者您可以使用下面的Array类:

public int ArrayProduct(int[] array)
{
    int p = 1;
    Array.ForEach(array, el =>
    {
        p *= el;
    });
    return p;
}

还有一种叫做数组的扩展方法,猜怎么样! ForEach

public int ArrayProduct(int[] array)
{
    int p = 1;
    array.ForEach(element =>
    {
        p *= element;
    });
    return p;
}

然后在获得如下数据后调用它:

int product = ArrayProduct(array);
Console.WriteLine(product);

还有另一种方式@Peter A. Schneider根据这个问题使用Linqhere

public int ArrayProduct(int[] array)
{
    return array.Aggregate(1, (acc, val) => acc * val);
}

更好地c# 6及以上:

public int ArrayProduct(int[] array) => array.Aggregate(1, (acc, val) => acc * val);

如果您在获取数据时遇到问题,请告诉我们!

答案 1 :(得分:0)

您可以通过引用调用方法。你应该使用out和ref关键词: https://msdn.microsoft.com/en-us/library/t3c3bfhx.aspx

答案 2 :(得分:0)

这是一个跟踪单独变量中的条目数并将其与数组一起传递给处理函数的示例:

static void Main(string[] args)
{
    int SIZE = 10;
    int numEntries = 0;
    int[] array = new int[SIZE];

    Console.WriteLine("Enter up to " + SIZE.ToString() + " integer(s).");

    string input;
    int userInput;
    for (int i = 0; i < array.Length; i++)
    {
        bool valid = false;
        do
        {
            Console.Write("Enter integer #" + (i+1).ToString() + " or 0 to stop: ");
            input = Console.ReadLine();
            valid = int.TryParse(input, out userInput);
            if (!valid)
            {
                Console.WriteLine("Invalid entry!");
            }
        } while (!valid);

        if (userInput == 0)
        {
            break;
        }

        numEntries++;
        array[i] = userInput;
    }

    if (numEntries > 0)
    {
        int product = ArrayProduct(array, numEntries);
        Console.WriteLine("The product is " + product.ToString("n0") + ".");
    }
    else
    {
        Console.WriteLine("No entries were made!");
    }

    Console.Write("Press [Enter] to quit.");
    Console.ReadLine();
}

private static int ArrayProduct(int[] arr, int length)
{
    int product = 1;
    if (length <= arr.Length)
    {
        for(int i = 0; i < length; i++)
        {
            product = product * arr[i];
        }
    }
    return product;
}