2013-04-26 74 views
0

我試圖從頭開始創建一個查找方法,以查看兩個對象是否相等,因爲某些成員是相等的,使用Equals方法來做到這一點。我知道使用Find/Contains方法會更快,但我無法使用它們。方法的簽名是「static int Find(List c,Coffee x)」如果x在c中存在,Find查找x在c中並返回一個有效索引(例如0,1),否則返回-1。必須使用equals方法來確定等同性。如果傳遞的對象不等於列表中的當前對象,它將被添加到列表中(該列表包含從基類派生的兩種類型的對象,因此列表可以存儲這兩種類型)。等值換算由名稱,成本,需求,持有成本和焙烤類型定義,用於定期和名稱,成本,需求,持有成本和最小數量的無水咖啡。這是我到目前爲止有:創建查找方法

static void Main(string[] args) 
    { 

     // Create objects and references 
     Coffee obv = new Coffee(); 
     Decaf decafCoffee = null; 
     Regular regularCoffee = null; 
     List<Coffee> inventory = new List<Coffee>(); 


     // Prompt user for input and store it as a string 
     Console.Write("Enter q to quit or the whole data as a comma delimited string using the following format Name,D,C,D:minQ or R:roast "); 
     string s = Console.ReadLine(); 

     // Loop 
     while (!s.ToLower().Equals("q")) 
     { 
      // Split string up and assign componets to variables 
      string[] values = s.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 
      string name = values[0]; 
      string demand = (values[1]); 
      string cost = (values[2]); 
      string type = values[3]; 

      // Check for > 0 and convert to numbers 
      float D = CheckDemand(demand); 
      float C = CheckCost(cost); 
      float M = 0; 

      if (type.StartsWith("D:")) 
      { 
       type = Regex.Match(type, @"\d+").Value; 
       M = CheckMin(type); 
       decafCoffee = new Decaf(name, D, C, M); 
       inventory.Add(decafCoffee); 
      } 

      else if (type.StartsWith("R:")) 
      { 
       if (type.Contains("light")) 
       { 
        M = 1; 
        regularCoffee = new Regular(name, D, C, M); 
        inventory.Add(regularCoffee); 
       } 
       else if (type.Contains("medium")) 
       { 
        M = 2; 
        regularCoffee = new Regular(name, D, C, M); 
        inventory.Add(regularCoffee); 
       } 

       else if (type.Contains("dark")) 
       { 
        M = 3; 
        regularCoffee = new Regular(name, D, C, M); 
        inventory.Add(regularCoffee); 
       } 
       else Console.WriteLine("\nError, please enter all lower case \"dark\", \"medium\", or \"light\" next time."); 
      } 

      else Console.WriteLine("\nError, please enter either \"D:\" followed by a number or \"R:\" followed by roast type next time."); 
      Console.Write("\nEnter q to quit or the whole data as a comma delimited string using the following format Name,D,C,D:minQ or R:roast: "); 
      s = Console.ReadLine(); 
     } // End loop 

     // Sort and display values 
     var sortedList = inventory.OrderBy(i => i.Q()).ToList(); 
     Console.WriteLine("\nName \t C ($)  Demand \t Detail Q(lbs.)  TAC 
     for (int j = 0; j < inventory.Count; j++) 
     { 
      Console.WriteLine("{0}", sortedList[j].toString()); 
     } 

     Console.WriteLine(obv.toStringQ()); 

這就是我對equals方法:

public override bool Equals(object obj) 
    { 
     if (obj is Coffee) 
     { 
      bool isNameEqual = Name.Equals(this.Name); 
      bool isuCostEqual = Cost.Equals(this.Cost); 
      bool isDemandEqual = Demand.Equals(this.Demand); 
      bool ishCostEqual = h.Equals(this.h); 
      bool isMinEqual = getQ.Equals(this.getQ); 

      return (isNameEqual && isuCostEqual && isDemandEqual && ishCostEqual && isMinEqual); 
     } 
     return false; 
    } 

如何去使用find方法?

+0

您需要在Coffee類中實現等於比較器。 – 2013-04-26 20:19:57

回答

1

在Coffee上實現一個'Equals'方法,並且可選擇在其Decaf,Regular等子類上執行。現在,您可以直接在列表上使用Contains方法。

+0

我將不得不手動創建該方法。 – 2013-04-26 20:24:57

+0

是的,你將不得不。因爲問題陳述中提到:「等同性是根據名稱,成本,需求,持有成本和烘焙類型來定義的,包括常規和名稱,成本,需求,持有成本和最小數量的無菌咖啡」 - 這應該在實施「 ' 方法。讓我們知道,如果你遇到問題,而實施這一點。祝你好運! – aquaraga 2013-04-26 20:26:07

+0

好的,謝謝! – 2013-04-26 20:32:23