如何从字符串和整数链接用户输入

时间:2019-05-31 09:34:18

标签: c#

我想创建一个应用程序,用户可以在其中输入商品和价格,然后显示最昂贵和最便宜的商品。

我是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} ");

2 个答案:

答案 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); }