C#:如何找到函数内数组的总和?

Posted

技术标签:

【中文标题】C#:如何找到函数内数组的总和?【英文标题】:C#: How to find the total sum of arrays inside functions? 【发布时间】:2021-12-16 13:54:55 【问题描述】:

我必须创建一个函数,使我能够为五金店中的每个客户输入数据。我应该为每个客户输入的数据是:名字、姓氏、购买的产品及其价格。此数据应存储在数组中。让这个函数声明一个 1D 容器,让用户用上述数据初始化这个 1D 容器,让这个函数把这个 1D 容器返回给 MAIN。在 MAIN 中,调用此函数 3 次,为 3 个客户创建数据。

之后,我需要创建另一个函数,将来自 MAIN 的所有三个 1D 客户数据容器作为参数,并将他们购买的产品的所有价格相加。让这个函数将总成本返回给 MAIN。 (这就是我卡住的地方。)

最后,我需要创建一个过程,将返回给 MAIN 的总成本作为参数,并确定这个总价格(设置为简单整数)是否是质数:

如果价值是质数,打印:“客户赢得价格” 否则,打印:“客户不会得到价格”

我被第二个函数卡住了,我试图做一个 C 风格的 for 循环,但它不起作用。

我尝试将这三个价格添加为带有索引但没有的数组位置。

这是我的代码:

using System;

namespace ghghh

    class Program
    
        public static string [] inputData()
        
            Console.WriteLine("Please enter your first name: ");
            string FirstName = Console.ReadLine();

            Console.WriteLine("Please enter your last name: ");
            string LastName = Console.ReadLine();

            Console.WriteLine("Please enter the product you ahve bought: ");
            string product = Console.ReadLine();

            Console.WriteLine("Please enter the price: ");
            string price = Console.ReadLine();

            string[] info = new string[4]  FirstName, LastName, product, price ;

            return info; 

        

        public static void sumOfPrice(string[] arr)
        
            

            for(int i = 0; i<arr.Length; i++)
            
                string sum = arr[i] + arr[i] + arr[i];
            


            
        

        public static void isTotalCostPrime(int n)
        
            if(n %2 == 0)
            
                Console.WriteLine("Customers wont get get the prize.");
            
            else
            
                Console.WriteLine("Customers win the prize");
            
        


        public static void Main (string[] args)
        
            string[] final = inputData();
            sumOfPrice(final);
            

        
    

【问题讨论】:

我假设这是家庭作业,所以我不会给你一个解决方案。您的代码只允许输入单个购买的物品。总结起来很容易(return price)。您可能想要做的是创建一个类型(class),其中包含您描述的四个属性(第一个、最后一个、产品和价格 - 价格为decimal)。然后在inputData 中有一个循环(顺便说一下,C# 中的约定是方法名称是这样写的:InputData)。将每个类实例添加到 List&lt;YourClass&gt; (就像一个数组,但有弹性 - 使用数组你需要知道前面有多少项)。 获得一组条目后,计算总和很容易 - 只需遍历集合(使用 foreach)并对价格属性求和。我建议你使用decimal.TryParse将输入的字符串转换为数字(这样如果有人输入one dollar而不是1.00,你可以重新提示)。建议:1)修复你的命名空间。 2)have 拼写为have,而不是ahve 真正令人困惑的作业。这似乎暗示名称、产品和价格都存储在同一个“一维容器”中,即使它们是不同的数据类型。这已经是一个很奇怪的设计了。一维容器是否需要是数组?在我看来,Dictionary&lt;string,object&gt; 可能更有意义。你有选择吗? 回复 Flydog57:谢谢。这不是作业,是朋友/同学给的问题。我们经常给自己这样的问题来互相拉伸。 回复John Wu:感谢您的回复。我可以使用列表或数组。 【参考方案1】:

在这里,您可以部分解决您的问题。我将价格设为十进制数字(因为大多数货币都是十进制的)。这会排除你的 prime test 最后。

我还包括了一个数量。我很想为每个项目取出名字和姓氏(因为它需要大量输入)。不过,总而言之,这应该足以让您开始使用。

我从一个 POCO 类开始来保存购买的物品(POCO 代表“Plain Old CLR Object”;它是一个纯粹由 properties 组成的类。它是一个有点像老式的 C struct

public class PurchasedItem

    public string FirstName  get; set; 
    public string LastName  get; set; 
    public string ProductName  get; set; 
    public int Quantity  get; set; 
    public decimal Price  get; set; 

我将用户界面分离到一个单独的类中(出于关注点分离的原因)。您可以轻松地将其折叠成一个类:

public class ItemUserInterface

    public static PurchasedItem PromptForItem()
    
        var purchasedItem = new PurchasedItem();
        Console.Write("What is your First Name (or type \"exit\" if complete)? > ");
        var firstName = Console.ReadLine();
        if (firstName.Equals("exit", StringComparison.OrdinalIgnoreCase))
        
            return null;
        
        purchasedItem.FirstName = firstName;
        Console.Write("What is your Last Name? > ");
        purchasedItem.LastName = Console.ReadLine();
        Console.Write("What did you purchase? > ");
        purchasedItem.ProductName = Console.ReadLine();
        purchasedItem.Quantity = PromptForInteger("How many did you buy");
        purchasedItem.Price = PromptForDecimal("What was the price");
        Console.WriteLine(""); //empty line
        return purchasedItem;
    

    public static void ShowPurchase (PurchasedItem item)
    
        Console.WriteLine($"item.FirstName item.LastName bought item.Quantity of item.ProductName at item.Price each");
    

    public static int PromptForInteger(string prompt)
    
        while (true)
        
            Console.Write(prompt + " > ");
            var entered = Console.ReadLine();
            if (int.TryParse(entered, out var result))
            
                return result;
            
            //otherwise error
            Console.WriteLine("Sorry, you must enter a proper integer value");
        
    

    public static decimal PromptForDecimal(string prompt)
    
        while (true)
        
            Console.Write(prompt + " > ");
            var entered = Console.ReadLine();
            if (decimal.TryParse(entered, out var result))
            
                return result;
            
            //otherwise error
            Console.WriteLine("Sorry, you must enter a proper decimal value");
        
    

顺便说一句,while (true) 将永远循环,除非您在循环之外执行 returnbreak 之类的操作。请注意,我一遍又一遍地提示用户,直到他/她输入格式正确的数字(对于数字条目)。

最后,这是我的Main 例程:

var itemsList = new List<PurchasedItem>();
while (true)

    var item = ItemUserInterface.PromptForItem();
    if (item == null)
    
        break;
    
    itemsList.Add(item);


// at this point, everything is entered
var totalPurchasePrice = 0.00m;
var totalItemsCount = 0;

foreach (var item in itemsList)

    ItemUserInterface.ShowPurchase(item);
    totalPurchasePrice += (item.Quantity * item.Price);
    totalItemsCount += item.Quantity;


Console.WriteLine($"Purchase Summary: itemsList.Count different items (totalItemsCount total items) for totalPurchasePrice:C");
Console.ReadLine(); //pause

如果我运行这个程序,输出看起来像:

What is your First Name (or type "exit" if complete)? > Fly
What is your Last Name? > Dog57
What did you purchase? > Cabbage
How many did you buy > 2
What was the price > 1.99

What is your First Name (or type "exit" if complete)? > Fly
What is your Last Name? > Dog57
What did you purchase? > Hammer
How many did you buy > 6
What was the price > abc
Sorry, you must enter a proper decimal value
What was the price > 10.55

What is your First Name (or type "exit" if complete)? > exit
Fly Dog57 bought 2 of Cabbage at 1.99 each
Fly Dog57 bought 6 of Hammer at 10.55 each
Purchase Summary: 2 different items (8 total items) for $67.28

【讨论】:

以上是关于C#:如何找到函数内数组的总和?的主要内容,如果未能解决你的问题,请参考以下文章

如何在范围内分配越来越多的数字并确保它们总和为N?

C# - 更改函数内的数组值

如何在 cuda 中获得并行数组的“总和”?

C#多线程/优化数组迭代以获得有趣的值(最小值、最大值、总和、平均值)

如何在VBA函数中返回总和

谷歌面试:在给定的整数数组中找到所有连续的子序列,其总和在给定范围内。我们能比 O(n^2) 做得更好吗?