试图在 5 名员工中找到出价最高的员工

Trying to find the employee who placed the highest bid out of 5 employees

提问人:Deasjia Shannon 提问时间:9/23/2023 更新时间:9/23/2023 访问量:79

问:

分配的重点是分配所有 5 个人的姓名和他们出价的次数(必须低于或等于零)。然后,我需要获取这些姓名和数字并存储它们,以便将它们显示为出价最高的员工以及出价多少。 例如:Jason 的最高出价为 63。

这是我尝试过的代码,一切正常,直到它比较最大的出价,并且它每次都会选择我的第一个出价者。我还是新手,所以我不知道所有的术语和细节,所以像个孩子一样和我说话。 C# 代码:

using System;
class TopSeller
{
    private static void 

Main(string[] args)
    {
        string employee;
        int widgetsSold;

        //Employee #1

        Console.WriteLine("Hello,     Can you please enter your name: ");
         employee =Console.ReadLine();
        Console.WriteLine("Enter the number of widgets sold: ");
        widgetsSold = int.Parse(Console.ReadLine());
        if(widgetsSold > 100)
        {
            Console.WriteLine("Number has to be at or below 100. Re-enter Widgets sold: ");
            widgetsSold = int.Parse(Console.ReadLine());
        }

        //Employee #2
        int widgetsSold2;
        String employee2;
        Console.WriteLine("Hello, Can you please enter your name: ");
        employee2 = Console.ReadLine();
        Console.WriteLine("Enter the number of widgets sold: ");
        widgetsSold2 = int.Parse(Console.ReadLine());
        if (widgetsSold2 > 100)
        {
            Console.WriteLine("Number has to be at or below 100. Re-enter Widgets sold: ");
            widgetsSold2 = int.Parse(Console.ReadLine());
        }

        //Employee #3
        String employee3;
        int widgetsSold3;
        Console.WriteLine("Hello, Can you please enter your name: ");
        employee3 = Console.ReadLine();
        Console.WriteLine("Enter the number of widgets sold: ");
        widgetsSold3 = int.Parse(Console.ReadLine());
        if (widgetsSold3 > 100)
        {
            Console.WriteLine("Number has to be at or below 100. Re-enter Widgets sold: ");
            widgetsSold3 = int.Parse(Console.ReadLine());
        }

        //Employee #4
        int widgetsSold4;
        String employee4;
        Console.WriteLine("Hello, Can you please enter your name: ");
        employee4 = Console.ReadLine();
        Console.WriteLine("Enter the number of widgets sold: ");
        widgetsSold4 = int.Parse(Console.ReadLine());
        if (widgetsSold4 > 100)
        {
            Console.WriteLine("Number has to be at or below 100. Re-enter Widgets sold: ");
            widgetsSold4 = int.Parse(Console.ReadLine());
        }

        //Employee #5
        int widgetsSold5;
        String employee5;
        Console.WriteLine("Hello, Can you please enter your name: ");
        employee5 = Console.ReadLine();
        Console.WriteLine("Enter the number of widgets sold: ");
        widgetsSold5 = int.Parse(Console.ReadLine());
        if (widgetsSold5 > 100)
        {
            Console.WriteLine("Number has to be at or below 100. Re-enter Widgets sold: ");
            widgetsSold5 = int.Parse(Console.ReadLine());
        }

        //top seller and largest bid
        String TopSeller;
        int LargestBid = 0;


        //Comparison
        if (widgetsSold > widgetsSold5)
        {
            TopSeller = employee;
            LargestBid = widgetsSold;
        }
        else if(widgetsSold < widgetsSold5)
        {
                TopSeller = employee5;
                LargestBid = widgetsSold5;
        }
        else if(widgetsSold4 > widgetsSold5)
        {
            TopSeller = employee4;
            LargestBid = widgetsSold4;
        }
        else if(widgetsSold3 > widgetsSold4)
        {
            TopSeller = employee3;
            LargestBid = widgetsSold3;
        }
        else if(widgetsSold2 > widgetsSold3)
        {
            TopSeller = employee2;
            LargestBid = widgetsSold2;
        }
        else if(widgetsSold > widgetsSold2)
        {
            TopSeller = employee;
            LargestBid = widgetsSold;
        }
        Console.WriteLine(TopSeller + " had the largest sell of: " + LargestBid);
    }
}
C# switch-语句

评论

0赞 Fildor 9/23/2023
循环已经讨论过了吗?
0赞 Martheen 9/23/2023
通过使用 if else,您无法将所有出价元素相互比较而不会变得如此复杂。一系列的 if 就足够了,或者,如果您已经学习过数组,那么枚举数组的 for/foreach 循环是一个更好的选择。
0赞 Fildor 9/23/2023
还有班级?你听说过课程吗?因为如果您收集了捆绑在一个类中的用户和出价信息,然后您可以找到其中的最高出价,那就容易多了。
0赞 Harshad Raval 9/23/2023
将每个员工的回复存储在数据库中,然后比较该数据以找到畅销产品/最高出价

答:

0赞 David House 9/23/2023 #1

因此,首先考虑将相关数据保存在一个对象中。我们可以使用几种不同类型的对象(如果您对此感兴趣,请查看记录和结构),但为了简单起见,让我们构建一个类。Bid

public class Bid {
    public string EmployeeName { get; }
    public int WidgetsSold { get; }

    public Bid(string employeeName, int widgetsSold)
    {
        EmployeeName = employeeName;
        WidgetsSold = widgetsSold;
    }
}

在上面,我们将创建一个对象来将我们的数据放在一起。这个对象有几个属性,我已将这些属性标记为 get only,因为一旦创建了出价,我们就不想更改它。然后有一个构造函数,它获取小部件的名称和数量,并将它们存储到这些属性中。Bid

现在,我们可以创建其中的几个出价等级,并轻松地将它们相互比较。我们将建立一个这些出价的列表,然后从那里获得最高的出价。数据捕获可以拆分为一些私有方法,以便我们将每个字段的所有输入验证放在一起。我们还将创建出价的逻辑置于一个循环中,这样我们就不会重复代码,并且可以轻松地扩展到要捕获的不同数量的出价。

using System;
using System.Collections.Generic;
using System.Linq;

class TopSeller
{
    // Defines the number of times to ask for bids
    public const int NumberOfBids = 5;

    private static void Main(string[] args)
    {
        // Create the list that will hold our bids
        var bidList = new List<Bid>();

        for (int i = 0; i < NumberOfBids; i++)
        {
            
            var employeeName = ReadEmployeeName();
        
            var widgetsSold = ReadNumberOfWidgets();

            // Create a new Bid and add it to our list.
            bidList.Add(new Bid(employeeName, widgetsSold));
        }

        // Put the bids in order of largest number of widgets sold to smallest, and select the first one
        var maxBid = bidList.OrderByDescending(bid => bid.WidgetsSold).First();

        Console.WriteLine($"{maxBid.EmployeeName} had the max bid of {maxBid.WidgetsSold}");
    }

    private static string ReadEmployeeName()
    {
        Console.WriteLine("Hello, can you please enter your name: ");

        while (true) // We want to loop forever until someone enters a valid name
        {
            var name = Console.ReadLine();
            
            if (string.IsNullOrWhiteSpace(name))
            {
                Console.WriteLine("Name must not be empty, please try again");
            }
            else
            {
                return name;
            }
        }
    }

    private static int ReadNumberOfWidgets()
    {
        Console.WriteLine("Enter the number of widgets sold: ");

        while (true) // We want to loop forever until someone enters a valid number of widgets
        {
            var numberOfWidgetsString = Console.ReadLine();
            
            if (string.IsNullOrWhiteSpace(numberOfWidgetsString))
            {
                Console.WriteLine("Number of widgets must not be empty, please try again");
            }
            else
            {
                var success = int.TryParse(numberOfWidgetsString, out var numberOfWidgets);

                if (!success)
                {
                    Console.WriteLine("Please enter a whole number");
                }
                else if (numberOfWidgets < 0 || numberOfWidgets > 100)
                {
                    Console.WriteLine("Number of widgets must be between 0 and 100");
                }
                else
                {
                    return numberOfWidgets;
                }
            }
        }
    }
}