Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要帮助在填充数组时检查重复项吗_C#_Arrays_Methods_Overriding_Parent - Fatal编程技术网

C# 需要帮助在填充数组时检查重复项吗

C# 需要帮助在填充数组时检查重复项吗,c#,arrays,methods,overriding,parent,C#,Arrays,Methods,Overriding,Parent,我正在试图找到一种在填充数组时搜索和检查数组的方法。我想使用从另一个类创建的重载equals方法 下面是公共类顺序中重载的equals方法:IComparable public override bool Equals(object obj) { Order temp = (Order)obj; if (orderNumber == temp.orderNumber) return true; else

我正在试图找到一种在填充数组时搜索和检查数组的方法。我想使用从另一个类创建的重载equals方法

下面是公共类顺序中重载的equals方法:IComparable

public override bool Equals(object obj)
    {

            Order temp = (Order)obj;
        if (orderNumber == temp.orderNumber)
            return true;
        else 
            return false;

    }
大体上,我尝试创建两个数组,以便在使用嵌套for循环时将1与另一个数组进行比较并检查DUP,但它不起作用。它只是继续填充数组,就好像从未见过第二个for循环一样

public static void Main()

    {
    //Create an array of five ShippedOrder objects. 
        ShippedOrder[] myShippedOrder = new ShippedOrder[5];
        ShippedOrder[] checkDup = new ShippedOrder[5];

    //Prompt the user for values for each Orders object; do NOT allow duplicate order numbers and force the user to reenter 
    //    the order when a duplicate order number is entered.



            for (int x = 0; x < myShippedOrder.Length; ++x)
            {

                int y = 0;
                myShippedOrder[x] = new ShippedOrder();
                checkDup[y] = new ShippedOrder();

                Console.Write("Please enter the order number for order {0}:  ", x + 1);
                checkDup[y].orderNumber = Convert.ToInt32(Console.ReadLine());             


                for (y = 0; y < checkDup.Length; ++y)
                {
                    if (checkDup[y] != null && myShippedOrder[x].Equals(checkDup[y]))
                    {
                        Console.WriteLine("Sorry, this order number has already been entered, please try again");
                        --x;
                        break;
                    }
                    else myShippedOrder[x].orderNumber = checkDup[y].orderNumber;
                }

                Console.Write("Please enter the customers name for order {0}:  ", x + 1);
                myShippedOrder[x].customerName = Console.ReadLine();

                Console.Write("Please enter the quantity that was ordered for order {0}:  ", x + 1);
                myShippedOrder[x].quantityOrdered = Convert.ToInt32(Console.ReadLine());

                myShippedOrder[x].totalPrice = myShippedOrder[x].quantityOrdered * PRICEEACH + ShippedOrder.SHIPFEE;


        }
publicstaticvoidmain()
{
//创建五个ShippedOrder对象的数组。
ShippedOrder[]myShippedOrder=新的ShippedOrder[5];
ShippedOrder[]checkDup=新的ShippedOrder[5];
//提示用户输入每个订单对象的值;不允许重复订单号并强制用户重新输入
//输入重复订单号时的订单。
对于(int x=0;x

关于如何在order类中使用重载的equal方法来帮助查找重复的OrderNumber(如果存在),并将输入的无效订单回退给用户,然后使用数组中的该点重试,有什么建议吗?

这里发生的是,当用户输入错误时,您需要
继续

试试这个:

public static void Main()

{
//Create an array of five ShippedOrder objects. 
    ShippedOrder[] myShippedOrder = new ShippedOrder[5];
    ShippedOrder[] checkDup = new ShippedOrder[5];

//Prompt the user for values for each Orders object; do NOT allow duplicate order numbers and force the user to reenter 
//    the order when a duplicate order number is entered.


        bool wronginput = false;
        for (int x = 0; x < myShippedOrder.Length; ++x)
        {

            int y = 0;
            myShippedOrder[x] = new ShippedOrder();
            checkDup[y] = new ShippedOrder();

            Console.Write("Please enter the order number for order {0}:  ", x + 1);
            checkDup[y].orderNumber = Convert.ToInt32(Console.ReadLine());             


            for (y = 0; y < checkDup.Length; ++y)
            {
                if (checkDup[y] != null && myShippedOrder[x].Equals(checkDup[y]))
                {
                    Console.WriteLine("Sorry, this order number has already been entered, please try again");
                    --x;
                    wronginput = true;
                    break;
                }
                else myShippedOrder[x].orderNumber = checkDup[y].orderNumber;
            }

            if(wronginput)
                continue;

            Console.Write("Please enter the customers name for order {0}:  ", x + 1);
            myShippedOrder[x].customerName = Console.ReadLine();

            Console.Write("Please enter the quantity that was ordered for order {0}:  ", x + 1);
            myShippedOrder[x].quantityOrdered = Convert.ToInt32(Console.ReadLine());

            myShippedOrder[x].totalPrice = myShippedOrder[x].quantityOrdered * PRICEEACH + ShippedOrder.SHIPFEE;


    }
publicstaticvoidmain()
{
//创建五个ShippedOrder对象的数组。
ShippedOrder[]myShippedOrder=新的ShippedOrder[5];
ShippedOrder[]checkDup=新的ShippedOrder[5];
//提示用户输入每个订单对象的值;不允许重复订单号并强制用户重新输入
//输入重复订单号时的订单。
bool错误输入=错误;
对于(int x=0;x
请注意,我是如何添加了
错误输入的
,这样就在第二个for循环之后,它会返回到外部循环的开始


我认为这就是您现在正在寻找的,即使有更好的方法来检查重复项。

为什么不使用字典?此外,任何时候重载等于时,也应该重载运算符==和GetHashCode()。这里讨论了重载等于的后果。例如:对不起,我没有发布整个程序,但我也发布了重载其他程序。我认为这与这个问题无关,所以我没有发布代码。谢谢,我想我的另一个问题是我得到了一个“未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例。“从此行”else myShippedOrder[x]。orderNumber=checkDup[y]。orderNumber;"这是我代码中的第118行,但我不确定这是否是我在这里发布的内容。如果这有帮助的话,我可以发布整个内容?我添加了额外的if检查,但在添加bool值后,仍然会在119行获得对象实例的运行时错误。如果if通过,这一行将成为t中的下一个条目他使用了原始数组,但这可能是一个坏主意,因为其他方法将运行太多次。我需要更改该位置。你有什么更好的方法我洗耳恭听,只是我需要在Order类中合并重写的equals方法,Order类是ShippedOrder的父类