我想创建一个应用程序,用户可以在其中输入商品和价格,然后显示最昂贵和最便宜的商品。
我是C#的新手,没有任何语言的编程经验,是在2.5周前开始学习的。我不明白如何将商品与价格链接,然后进行计算。关于如何构建应用程序,一分钱还没有下降:(
ItemInput();
PricingInput();
}
private static void ItemInput()
{
Console.WriteLine("Add your items and price, once you're done, type 'end' ");
AskForTheItem();
AskForThePrice();
}
static void AskForTheItem()
{
while (itemPrice != "end")
{
Console.Write("Add your item:");
string item = Console.ReadLine();
Console.Write("Add the price:");
int price = int.Parse(Console.ReadLine());
itemPrice = Console.ReadLine();
}
Console.WriteLine("Add your item: ");
name = Console.ReadLine();
numberOfItems++;
}
static void AskForThePrice()
{
Console.WriteLine("Add the price: ");
price = int.Parse(Console.ReadLine());
numberOfPrice++;
}
private static void PricingInput()
{
Console.WriteLine($"The cheapest item is: {name} and the most expensive item is: {name} ");
答案 0 :(得分:0)
欢迎使用StackOverflow!您的问题似乎很广泛,但是我认为您需要的是使用类进行面向对象编程的第一步。
您的代码似乎是一个好的开始,但是要存储信息,您将需要一些对象。
您可以使用类创建自己的对象。在这种情况下,您的课程将需要一个名称属性和一个价格属性。
定义类如下(您应该在一个新文件中进行此操作):
class MyItem{
public string Name { get; set; }
public int Price { get; set; }
}
然后在类的开头使用AskForTheItems方法(可能还有Main方法),您需要添加一个List来存储项目。您可以这样:
private static List<MyItem> items = new List<MyItem>();
对于获取项目的方法,您需要进行一些调整。您也不再需要numberOfItems
变量,因为您可以根据需要调用items.Count
。
private static void AskForTheItems()
{
do
{
Console.WriteLine("Add your item:");
// get the name
Console.Write("Name: ");
string name = Console.ReadLine();
// get and convert the price
Console.Write("Price: ");
int price = int.Parse(Console.ReadLine());
// create the item and fill it with the values
MyItem item = new MyItem();
item.Name = name;
item.Price = price;
// add the item to your list
items.Add(item);
// ask if the user want's to add another one
Console.WriteLine("Again? (y/n)");
}
while (Console.ReadKey(true).Key != ConsoleKey.N);
}
使用Linq打印最便宜和最昂贵的打印机非常容易(甚至可能更容易/更好)。
private static void PrintCheapestAndMostExpensive() {
// get the first item where the price is the same as the minimum of all prices in the list
MyItem cheapestItem = items.First(i => i.Price == items.Min(i2 => i2.Price));
// get the first item where the price is the same as the maximum of all prices in the list
MyItem mostExpensiveItem = items.First(i => i.Price == items.Max(i2 => i2.Price));
Console.WriteLine($"The cheapest item is: {cheapestItem.Name} and the most expensive item is: {mostExpensiveItem.Name}");
}
我希望这会有所帮助。如果您有任何疑问,请随时提出-我将尽力解释您尚不了解的任何内容。
顺便说一句,我没有做/没做过一些事情,因为我觉得对于像这样的小程序来说解释太多了。当前,将输入字符串转换为int(错误)时没有错误处理。还有一些更简单的方法可以为项目编写初始化,但我认为这种方法更易于理解。
同样,使用此代码,它始终会打印价格最低的第一项。如果同时有两个价格最低,这可能是个问题。
Linq本身相当难(但非常重要),因此我强烈建议您阅读有关它的内容。我会很高兴地在这里详细解释我使用的Linq,但是由于这是一个巨大的主题,因此我不会涉及更多内容。
答案 1 :(得分:0)
private static void ItemInput()
{
PricingInput(AskForTheItem());
}
static Dictionary<String, int> AskForTheItem()
{
var result = new Dictionary<String, int>();
Console.WriteLine("Add your items and price, once you're done, type empty item ");
while (1)
{
Console.Write("Add your item or keep empty :");
string item = Console.ReadLine();
if(String.IsNullOrEmpty(item)) return result;
Console.Write("Add the price:");
while(!int.TryParse(out var price, Console.ReadLine()) Console.Write("Wrong price, please Add the price:");
result.Add(item, price);
}
}
private static void PricingInput(Dictionary<String,int> list)
{
String minItem = null;
int minPrice = -1;
String maxItem = null;
int maxPrice = -1;
foreach(var i in list) {
if(price<0 || i.Value<price) { minItem = i.Key; minPrice=i.Value;}
if( i.Value>price) { maxItem = i.Key; maxPrice=i.Value;}
Console.WriteLine($"The cheapest item is: {1} and the most expensive item is: {2} ",minItem,maxItem); }