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<YourClass>
(就像一个数组,但有弹性 - 使用数组你需要知道前面有多少项)。
获得一组条目后,计算总和很容易 - 只需遍历集合(使用 foreach
)并对价格属性求和。我建议你使用decimal.TryParse
将输入的字符串转换为数字(这样如果有人输入one dollar
而不是1.00
,你可以重新提示)。建议:1)修复你的命名空间。 2)have
拼写为have
,而不是ahve
真正令人困惑的作业。这似乎暗示名称、产品和价格都存储在同一个“一维容器”中,即使它们是不同的数据类型。这已经是一个很奇怪的设计了。一维容器是否需要是数组?在我看来,Dictionary<string,object>
可能更有意义。你有选择吗?
回复 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)
将永远循环,除非您在循环之外执行 return
或 break
之类的操作。请注意,我一遍又一遍地提示用户,直到他/她输入格式正确的数字(对于数字条目)。
最后,这是我的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#:如何找到函数内数组的总和?的主要内容,如果未能解决你的问题,请参考以下文章