C# 需要帮助在填充数组时检查重复项吗
我正在试图找到一种在填充数组时搜索和检查数组的方法。我想使用从另一个类创建的重载equals方法 下面是公共类顺序中重载的equals方法:IComparableC# 需要帮助在填充数组时检查重复项吗,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
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的父类