Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 - Fatal编程技术网

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);