0

配列を埋めながら配列を検索してチェックする方法を見つけようとしています。別のクラスから作成したオーバーロードされた equals メソッドを使用したいと考えています。

パブリック クラス Order のオーバーロードされた equals メソッドを次に示します。

public override bool Equals(object obj)
    {

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

    }

主に、2 つの配列を作成して、1 を他の配列と比較し、ネストされた for ループを使用して重複をチェックできるようにしようとしていますが、機能していません。2番目の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;


        }

注文クラスでオーバーロードされた equal メソッドを使用して、重複する orderNumbers が存在する場合に見つけ、無効な注文を入力したユーザーにキックバックし、配列内のその場所で再試行する方法に関する提案はありますか?

4

1 に答える 1

1

ここで起こっていることはcontinue、ユーザーが何か間違ったことを入力したときに必要なことです。

これを試して:

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;


    }

wronginput2 番目の for ループの直後に、外側のループの先頭に戻る ように追加したことに注目してください。

重複をチェックするために行っていることを行うためのより良い方法がありますが、それがあなたが今探しているものだと思います.

于 2012-04-19T02:21:08.753 に答える