2011-11-29 40 views
0

我有一个小问题,在我的源代码我不明白为什么我的ToUpload方法给我一个额外的console.writeLine在控制台窗口。 (写出啤酒对象)C#方法给我一个额外的Console.WriteLine

当我调用ToUpload方法并且啤酒在啤酒字典中时,它给了我一个额外的Console.WriteLine,其中在控制台处写出啤酒对象。我不知道为什么。

这是我的输出:

  • Borsodi SOR 160 4.6 1000
  • 比尔森250 4.4 800
  • SoproniÁszok150 4.5 900
  • 德雷尔经典200,5.2 600
  • Borsodisör160 4.6 475
  • 比尔森250 4.4 800
  • SoproniÁszok150 4.5 1350
  • 德雷尔经典200,5.2 600
  • Bratista SOR,230,300 4.5
  • SoproniÁszok150 4.5 450 //这是额外
  • Borsodi SOR 160 4.6 100 //这是

,我想这样:

  • Borsodi SOR 160 4.6 1000
  • 比尔森250 4.4 800
  • SoproniÁszok150 4.5 900
  • 德雷尔经典200,5.2 600
  • Borsodi SOR 160 4.6 475
  • 比尔森Urquell 250 4.4 800
  • SoproniÁszok150,4.5 1350
  • Dreher Classic 200,5.2 600
  • Bratista SOR,230,300 4.5

    public void ToUpload(Beer beer, int dl) 
    { 
        int d = 0; 
        Beer s = null; 
        // search for beer in beers dictionary 
        foreach (var item in beers) 
        { 
         if (item.Key.Equals(beer)) 
         { 
          d = item.Value; 
          s = item.Key; 
         } 
        } 
        // if this beer in the beers, update the value 
        if (s != null) 
        { 
         beers[s] = d + dl; 
        } 
        // if a new beer, just add to beers 
        beers.Add(beer, dl); // IDictionary beers = new Dictionary 
    } 
    
    public Pub() 
    { 
        ToUpload(new Beer("Borsodi beer", 160, 4.6), 1000); 
        ToUpload(new Beer("Pilsner Urquell", 250, 4.4), 800); 
        ToUpload(new Beer("Soproni Ászok", 150, 4.5), 900); 
        ToUpload(new Beer("Dreher Classic", 200, 5.2), 600); 
    } 
    
    static void Main(String[] args) 
    { 
        Beer b = new Beer("Borsodi beer", 160, 4.6); 
        Beer c = new Beer("Bratista beer", 230, 4.5); 
        Beer d = new Beer("Soproni Ászok", 150, 4.5); 
        Pub pub = new Pub(); 
        foreach (var item in pub.beers) 
        { 
         Console.WriteLine("{0} {1}", item.Key, item.Value); 
    
        } 
    
    
        Console.WriteLine(pub.Elad("Borsodi beer", 125)); 
    
    
        //pub.ToUpload(b, 2000); 
        pub.ToUpload(c, 300); // Don't Write out this beer object 
        pub.ToUpload(d, 450); // Write out this beer object the console 
        pub.ToUpload(b, 100); // Write out this beer object the console 
    
    
    
        foreach (var item in pub.beers) 
        { 
         Console.WriteLine("{0} {1}", item.Key, item.Value); 
    
        } 
    
        Console.ReadLine(); 
    

下面是啤酒类:

public class Beer 
{ 
    string name; 
    int price; 
double alcohol; 

public string Name { get { return name; } } 

public int Price{ get; set; } 

public double AlkoholTartalom { get { return alcohol; } } 

public Beer(string name, int price, double alcohol) 
{ 
    // ide írja a kódot 
    this.name = name; 
    this.price = price; 
    this.alcohol = alcohol; 
} 

public override bool Equals(object obj) 
{ 
    if (obj is Beer) 
    { 
     Beer other = (Beer)obj; 
     return this.name == other.name; 
    } 
    return false; 
} 

public override string ToString() 
{ 
    return this.Name + " " + this.Price+ " " + this.AlkoholTartalom; 
} 
} 

回答

2

在ToUpload方法你缺少 “其他”。

// if this beer in the beers, update the value 
if (s != null) 
{ 
    beers[s] = d + dl; 
} 
else // Add this 
    beers.Add(beer, dl); // IDictionary beers = new Dictionary 

从我所看到的,这应该修复它。 你正在添加啤酒到字典,即使你只是更新它。

+0

谢谢。我需要睡觉:D – blaces

+0

嘿,没问题。 – Katu

0

根据什么类型的啤酒是你可以这样做:

public void ToUpload(Beer beer, int dl) 
{ 
    int d = 0; 
    if(beers[beer] != null) 
     d = beers[beer]; 

    beers[beer] = d + dl; 
} 

我知道哈希表会自动更新或添加到基于该键是否字典,发现当他们访问该办法。

相关问题