C # метод дает мне дополнительную Console.WriteLine - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть небольшая проблема, в моем исходном коде я не понимаю, почему мой метод ToUpload дает мне дополнительный console.writeLine в окне консоли. (выписать объект пива)

Когда я вызываю метод ToUpload, и пиво находится в словаре пива, это дает мне дополнительную Console.WriteLine, где записывается объект пива на консоли. И я не знаю почему.

Это мой вывод:

  • Borsodi sör 160 4,6 1000
  • Pilsner Urquell 250 4,4 800
  • Шопрони Ашок 150, 4,5 900
  • Dreher Classic 200, 5,2 600
  • 125
  • Borsodi sör 160 4,6 475
  • Pilsner Urquell 250 4,4 800
  • Шопрони Ашок 150, 4,5 1350
  • Dreher Classic 200, 5,2 600
  • Братиста сёр, 230, 4,5 300
  • Soproni Ászok 150, 4,5 450 // это дополнительно
  • Borsodi sör 160 4,6 100 // и это

и я хочу это:

  • Borsodi sör 160 4,6 1000
  • Pilsner Urquell 250 4,4 800
  • Сопрони Асок 150, 4,5 900
  • Dreher Classic 200, 5,2 600
  • 125
  • Borsodi sör 160 4,6 475
  • Pilsner Urquell 250 4,4 800
  • Шопрони Асок 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();
    

Вот класс пива:

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 ]

2 голосов
/ 29 ноября 2011

Вам не хватает «Else» в методе 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 голосов
/ 29 ноября 2011

В зависимости от того, какой тип пива вы можете просто сделать:вот так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...