0

このコードは、重複を1回だけチェックすることを除いて機能します。ユーザーが同じ整数を再度入力すると、プログラムは2回目にそれを受け入れます。ユーザーが何回入力しても、このプログラムがエントリを受け入れないようにするにはどうすればよいですか?

        int[] shippedOrderNumbers = new int[5];

        Console.WriteLine("Please Input first Shipping Number: ");
        shippedOrderNumbers[0] = Convert.ToInt32(Console.ReadLine());           

        Console.WriteLine("Please Input second Shipping Number: ");
        shippedOrderNumbers[1] = Convert.ToInt32(Console.ReadLine());           


        if (shippedOrderNumbers[0] == shippedOrderNumbers[1])
        {
            Console.WriteLine("A dublicate number is not allowed please try again: ");
            shippedOrderNumbers[1] =Convert.ToInt32(Console.ReadLine());               
        }          

            Console.WriteLine("Please Input third Shipping Number: ");
            shippedOrderNumbers[2] = Convert.ToInt32(Console.ReadLine());


        if (shippedOrderNumbers[0] == shippedOrderNumbers[2] || shippedOrderNumbers[1] == shippedOrderNumbers[2])
        {
            Console.WriteLine("A dublicate number is not allowed please try again: ");
            shippedOrderNumbers[2] = Convert.ToInt32(Console.ReadLine());
        }                           
            Console.WriteLine("Please Input fourth Shipping Number: ");
            shippedOrderNumbers[3] = onvert.ToInt32(Console.ReadLine());               


        if (shippedOrderNumbers[0] == shippedOrderNumbers[3] || shippedOrderNumbers[1] == shippedOrderNumbers[3] || shippedOrderNumbers[2] == shippedOrderNumbers[3])
        {
            Console.WriteLine("A dublicate number is not allowed please try again: ");
            shippedOrderNumbers[3] = Convert.ToInt32(Console.ReadLine());
        }                           
            Console.WriteLine("Please Input fifth Shipping Number: ");
            shippedOrderNumbers[4] = Convert.ToInt32(Console.ReadLine());


        if (shippedOrderNumbers[0] == shippedOrderNumbers[4] || shippedOrderNumbers[1] == shippedOrderNumbers[4] || shippedOrderNumbers[2] == shippedOrderNumbers[4] || shippedOrderNumbers[3] == shippedOrderNumbers[4])
        {
            Console.WriteLine("A dublicate number is not allowed please try again: ");
            shippedOrderNumbers[4] = Convert.ToInt32(Console.ReadLine());
        }           
4

2 に答える 2

3

配列よりもジェネリックリストを使用したほうがいいと思います。単純なループを使用して、コードを単純化することもできます。例については、以下を参照してください。

IList<int> shippedOrderNumbers = new List<int>();

for (int = 0; i < 5; i++)
{
    Console.WriteLine("Please input the Shipping Number: ");

    int shippingNumber;
    if (!Int.TryParse(Console.ReadLine(), out shippingNumber) 
    {
        Console.WriteLine("Your shipping number is not an integer");
    }

    if (shippedOrderNumbers.Contains(shippingNumber)) 
    {
        Console.WriteLine("This shipping number has already been entered.");
    }
    else 
    {
        shippedOrderNumbers.Add(shippingNumber);
        Console.WriteLine("Thanks for submitting your shipping number.");
    }
}

PS。私はこれをメモ帳で書いたので、うまくいかないかもしれませんが、問題を解決する方法についての一般的なガイドを提供するはずです。

于 2012-06-18T00:07:40.417 に答える
0

これらの線に沿った何かがそれを行う必要があります:

var shippedOrderNumbers = new List<int>();

var validOrderNumbers = 0;

while(validOrderNumbers < 5)
{
     Console.WriteLine("Input order number:");
     var nextOrderNumber = Convert.ToInt32(Console.ReadLine());
     if(shippedOrderNumbers.Any(son => son == nextOrderNumber))
     {
         Console.WriteLine("Duplicate order number. Please enter another");
         continue;
     }
     shippedOrderNumbers.Add(nextOrderNumber);
     validOrderNumbers++;
}
于 2012-06-18T00:08:44.540 に答える