I have a little problem, in my source code I don’t see why is my ToUpload method give me an extra console.writeLine in the Console window. (write out the beer object)
When I call the ToUpload method, and the beer is in the beers dictionary, it give me an extra Console.WriteLine, where write out the beer object at the Console. And I don’t know why.
This is my output:
- Borsodi sör 160 4.6 1000
- Pilsner Urquell 250 4.4 800
- Soproni Ászok 150, 4.5 900
- Dreher Classic 200, 5.2 600
- 125
- Borsodi sör 160 4.6 475
- Pilsner Urquell 250 4.4 800
- Soproni Ászok 150, 4.5 1350
- Dreher Classic 200, 5.2 600
- Bratista sör, 230, 4.5 300
- Soproni Ászok 150, 4.5 450 // this is extra
- Borsodi sör 160 4.6 100 // and this is
and i want this:
- Borsodi sör 160 4.6 1000
- Pilsner Urquell 250 4.4 800
- Soproni Ászok 150, 4.5 900
- Dreher Classic 200, 5.2 600
- 125
- Borsodi sör 160 4.6 475
- Pilsner Urquell 250 4.4 800
- Soproni Ászok 150, 4.5 1350
- Dreher Classic 200, 5.2 600
-
Bratista sör, 230, 4.5 300
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();
Here is the Beer class:
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;
}
}
You are missing “Else” at the ToUpload method.
From what i see, this should fix it.
You are adding the beer to dictionary, even thou you should just update it.