2013-04-16 108 views
0

我所有的一切運行良好,但我正在尋找一種方式來提示用戶,如果重複的訂單號碼被輸入,並讓他們重新輸入一個新的訂單號碼。現在它只接受重複項,並不顯示我想要的錯誤信息。我創建了兩個類Order的基地,和ShippedOrder。這裏是我在Order課程中的等號方法。防止重複的號碼,並要求用戶重新進入

public override bool Equals(Object e) 
    { 
     bool equal; 
     Order temp = (Order)e; 
     if (orderNumber == temp.orderNumber) 
      equal = true; 
     else 
      equal = false; 
     return equal; 

這是我在主要方法中的內容。我可以發佈一切,如果它會幫助。再次,我正在尋找幫助,找到一種方法來防止用戶輸入相同的兩個訂單號碼。

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()); 
+0

在你的第二個'for'循環中,你正在檢查一個新的ShippedOrder對象,這個對象可能沒有ID。當你把它與'x'比較時,沒有匹配。 –

+0

最簡單的方法是將您的orderarray從ShippedOrder []類型更改爲List 類型。然後你可以在輸入循環中使用orderarray.Contains(ShippedOrder newOrder)。 – Ben313

+0

我同意問題是檢查[y]沒有價值我只是不知道如何給它一個值,而不會使它等於orderArray [x],它只是導致無限循環,或者看起來等於零。我需要找到一種方法來使檢查[y]等於所有以前的用戶輸入。我也不太熟悉List 類型。我們還沒有在課堂上講過這個。我認爲這是我的教授想要完成的方式,所以我希望用這種方式來達到正確的結果。 – Evan

回答

0

我將與LINQ做到這一點,這是它居然照(如果這個代碼不叫每秒一千次)

var arrayExpectedCount = 5; 
var orderArray = new List<ShippedOrder>(); //define array of orders to generate 
var check = new List<ShippedOrder>();  //array of orders already shipped,already present 
...... 
//infinit interation 
while(true) { 
    var orderNumber = Convert.ToInt32(Console.ReadLine()); 
    if(!check.Exist(o=>o.orderNumber == orderNumber) 
    { 
     //create a new order and push it to the orderArray 
    } 

    //break condition of the infinit loop 
    if(orderArray.Count == arrayExpectedCount) 
     break; 

} 

如果這不是你問什麼,請澄清。

+0

我認爲[List(T).Exist](http://msdn.microsoft.com/en-gb/library/bfed8bca.aspx)不是_strictly_ Linq,Linq(和IEnumerable(T)因此)等價於[Linq.Any](http://msdn.microsoft.com/en-us/library/system.linq.enumerable.any.aspx),但我相信它們爲列表提供相同的行爲,而答案依然存在。感覺值得一提的是,如果OP或其他人在其實施中使用除通用列表之外的其他東西, – VisualMelon

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