C# 防止重复号码并要求用户重新输入
我所有的一切都运行良好,但我正在寻找一种方法,如果输入了重复的订单号,则提示用户,并让他们重新输入新的订单号。现在它只接受重复项,不显示我想要的错误消息。我创建了两个类C# 防止重复号码并要求用户重新输入,c#,arrays,C#,Arrays,我所有的一切都运行良好,但我正在寻找一种方法,如果输入了重复的订单号,则提示用户,并让他们重新输入新的订单号。现在它只接受重复项,不显示我想要的错误消息。我创建了两个类Orderbase和ShippedOrder。下面是我在Order类中使用的equals方法 public override bool Equals(Object e) { bool equal; Order temp = (Order)e; if (orderNum
Order
base和ShippedOrder
。下面是我在Order
类中使用的equals方法
public override bool Equals(Object e)
{
bool equal;
Order temp = (Order)e;
if (orderNumber == temp.orderNumber)
equal = true;
else
equal = false;
return equal;
下面是我在main方法中的内容。如果有帮助的话,我可以发布一切。我再次寻求帮助,找到一种方法来防止用户输入相同的两个订单号
static void Main(string[] args)
{
double sum = 0;
ShippedOrder[] orderArray = new ShippedOrder[5];
ShippedOrder[] check = new ShippedOrder[5];
bool wrong = true;
for (int x = 0; x < orderArray.Length; ++x)
{
orderArray[x] = new ShippedOrder();
Console.Write("Enter order number: ");
orderArray[x].orderNumber = Convert.ToInt32(Console.ReadLine());
for (int y = 0; y < x; ++y)
{
check[y] = new ShippedOrder();
if (orderArray[x].Equals(check[y]))
wrong = false;
while (!wrong)
{
Console.WriteLine("Sorry, the order number {0} is a duplicate. \nPlease reenter {1}",
orderArray[x], check[y]);
for (y = 0; y < x; ++y)
{
if (orderArray[x].Equals(check[y]))
wrong = false;
}
check[y] = orderArray[x];
}
}
Console.Write("Enter cusomer name: ");
orderArray[x].customerName = Console.ReadLine();
Console.Write("Enter quanity: ");
orderArray[x].quanityOrdered = Convert.ToInt32(Console.ReadLine());
static void Main(字符串[]args)
{
双和=0;
ShippedOrder[]orderArray=新的ShippedOrder[5];
ShippedOrder[]检查=新的ShippedOrder[5];
布尔错=真;
对于(int x=0;x
我会用LINQ做这件事,这就是它真正闪耀的地方(如果这段代码不是每秒调用1000次)
var arrayExpectedCount=5;
var orderArray=new List();//定义要生成的订单数组
var check=new List();//已发货、已存在的订单数组
......
//无穷迭代
while(true){
var orderNumber=Convert.ToInt32(Console.ReadLine());
如果(!check.Exist)(o=>o.orderNumber==orderNumber)
{
//创建新订单并将其推送到orderArray
}
//无穷循环的中断条件
if(orderArray.Count==arrayExpectedCount)
打破
}
如果这不是您想要的,请澄清。List orderArray=new List();
List<ShippedOrder> orderArray = new List<ShippedOrder>();
do {
int newOrderNum = 0;
// Retrieve first attempt
Console.Write("Enter order number: ");
newOrderNUm = Conver.ToInt32(ConsoleReadLine());
// Check if any of the orders in orderArray have the same order number
while(orderArray.Any(a=>a.orderNumber == newOrderNum) {
Console.Write("Sorry, the order number is a duplicate. Please enter re-enter the order number: ");
newOrderNum = Conver.ToInt32(ConsoleReadLine());
};
orderArray.Add(new ShippedOrder() {
orderNumber = newOrderNum,
};
} while(orderArray.Length < 5);
做{
int newOrderNum=0;
//检索第一次尝试
控制台。写入(“输入订单号:”);
newOrderNUm=Conver.ToInt32(ConsoleReadLine());
//检查orderArray中的任何订单是否具有相同的订单号
while(orderArray.Any(a=>a.orderNumber==newOrderNum){
控制台。写入(“对不起,订单号重复。请输入或重新输入订单号:”;
newOrderNum=Conver.ToInt32(ConsoleReadLine());
};
添加(新的ShippedOrder(){
orderNumber=newOrderNum,
};
}而(orderArray.Length<5);
在第二个循环中,您正在为检查[y]提供一个新的ShippedOrder对象,该对象可能没有ID。当您将其与x
进行比较时,没有匹配项。最简单的方法是将您的orderarray从ShippedOrder[]类型更改为列表类型。然后您可以使用orderarray.Contains(ShippedOrder newOrder)在一个输入循环内。我同意问题是check[y]没有值,我只是不知道如何给它一个值,而不使它等于orderArray[x],这只会导致内联循环,或者看起来等于零。我需要找到一种方法来进行check[y]与之前所有的用户输入相等。另外,我对列表类型也不太熟悉。我们在课堂上还没有讨论过这个问题。我想这是我的教授希望这样做的,所以我希望使用这种方法来获得正确的结果。我想不是严格意义上的Linq,Linq(因此是IEnumerable(t))等价的是,但我相信它们为列表提供了相同的行为,答案仍然有效。我觉得如果OP或其他人在实现中使用的不是通用列表,那么值得一提。
List<ShippedOrder> orderArray = new List<ShippedOrder>();
do {
int newOrderNum = 0;
// Retrieve first attempt
Console.Write("Enter order number: ");
newOrderNUm = Conver.ToInt32(ConsoleReadLine());
// Check if any of the orders in orderArray have the same order number
while(orderArray.Any(a=>a.orderNumber == newOrderNum) {
Console.Write("Sorry, the order number is a duplicate. Please enter re-enter the order number: ");
newOrderNum = Conver.ToInt32(ConsoleReadLine());
};
orderArray.Add(new ShippedOrder() {
orderNumber = newOrderNum,
};
} while(orderArray.Length < 5);