Reputation: 495
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:
and i want this:
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;
}
}
Upvotes: 0
Views: 171
Reputation: 2659
Depending on what type beers is you can just do this:
public void ToUpload(Beer beer, int dl)
{
int d = 0;
if(beers[beer] != null)
d = beers[beer];
beers[beer] = d + dl;
}
I know that HashTables will automatically either update or add to the dictionary based on whether or not the key was found when they are accessed this way.
Upvotes: 0
Reputation: 701
You are missing "Else" at the ToUpload method.
// 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
From what i see, this should fix it. You are adding the beer to dictionary, even thou you should just update it.
Upvotes: 2