如何将列表中的数字相乘?

时间:2020-01-16 12:06:21

标签: c#

我想将列表中的数字相乘,但不知道如何解决该问题。我的代码有效,井号在列表中,除了小于零的井号。我写了一个produkt(engl,product)变量,但是不知道在哪里以及如何使用它。用户停止程序,按数字0,然后弹出消息产品:(英语乘积为:),然后应从列表中乘以数字。这是我的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Vjezba11_kolokvij1
{
    class Program
    {
        static void Main(string[] args)
        {
            int broj;

            List<int> produktBrojeva = new List<int>();

            do
            {
                Console.WriteLine("Unesite broj: ");
                int.TryParse(Console.ReadLine(), out broj);

                if (broj <= 0)
                {
                    Console.WriteLine("Krivi unos.");
                }
                else
                {
                    produktBrojeva.Add(broj);
                }
            } while (broj != 0);
            Console.WriteLine();

            int produkt;

            for (int i = 0; i < produktBrojeva.Count; i++)
            {
                Console.WriteLine(produktBrojeva[i]);
            }
        }
    }
}

4 个答案:

答案 0 :(得分:2)

您想用什么乘以数字?基本上所有东西都在那里。您创建列表并遍历列表,您只需要进行乘数即可。

编辑:您似乎想将每个数字彼此相乘。所以:

        int produkt = 1;

        for (int i = 0; i < produktBrojeva.Count; i++)
        {
            produkt *= produktBrojeva[i];
        }

        Console.WriteLine(produkt);

您需要检查是否有溢出。产品可能会变得很大。也许您想使用long而不是int。

答案 1 :(得分:2)

您的显示循环应类似于:

int produkt = 1;

for (int i = 0; i < produktBrojeva.Count; i++)
{
    produkt = produkt * produktBrojeva[i];
}                

Console.WriteLine(produkt);

或者更好的是:

// start with "nothing"
int? produkt = null;

for (int i = 0; i < produktBrojeva.Count; i++)
{
    // if we already assigned the first value, we multiply it.
    if(produkt.HasValue)
        produkt = produkt.Value * produktBrojeva[i];
    else
        // there wasn't a value set, just set the first value.
        produkt = produktBrojeva[i];
}                

// only display the produkt, when it has a value.
if(produkt.HasValue)
    Console.WriteLine(produkt.Value);
else
    Console.WriteLine("There isn't a value");

关于您的代码的一些说明:

int.TryParse(Console.ReadLine(), out broj);

您应该检查TryParse的结果,因为如果可以解析字符串,它将返回一个布尔值。如果输入A,它将在broj中输出0。但这不是零。

if(int.TryParse(Console.ReadLine(), out broj))
{
    // rest of the code.

}
else
    Console.WriteLine("Invalid input");

答案 2 :(得分:2)

希望这可以解决您的问题。基本上是您的代码,我做了一些小的更改。虽然有效,但我建议使用Here中所述的计算方法。

另一种选择是使用Linq进行计算Multiply up Values from Array

class Program
{
    static void Main(string[] args)
    {
        int broj;

        List<int> produktBrojeva = new List<int>();

        do
        {
            Console.WriteLine("Unesite broj: ");
            int.TryParse(Console.ReadLine(), out broj);

            if (broj <= 0)
            {
                Console.WriteLine("Krivi unos.");
            }
            else
            {
                produktBrojeva.Add(broj);
            }
        } while (broj != 0);
        Console.WriteLine();

        //Initialize with 1
        int produkt = 1;

        for (int i = 0; i < produktBrojeva.Count; i++)
        {
            //Calculate Product
            produkt *= produktBrojeva[i];

            Console.WriteLine(produktBrojeva[i]);
        }

        //Write Product to Console
        Console.WriteLine($"Product {produkt}");
    }
}

答案 3 :(得分:1)

最简单的方法:

var produkt = produktBrojeva.Aggregate((a, x) => a * x);

或者如果集合可能为空:

var produkt = produktBrojeva.Aggregate(0, (a, x) => a * x);

不要忘记添加一个using System.Linq;

相关问题