Lista instancji klas - porównanie konkretnego pola każdej instancji

0

Witam.
Utworzyłem listę instancji klasy i chciałbym porównać konkretne pole każdej instancji(np sprawdzić czy wartości pola są równe).
Konkretnie pole bookPrice.
Serdecznie proszę o jakąś podpowiedź.
Class Program
Class BookShop

0
foreach(BookShop ksiazkaX in ListOfBooks)
{
      foreach(BookShop ksiazkaY in ListOfBooks)
      {
            if (ksiazkaX.bookPrice == ksiazkaY.bookPrice) {
                //rowne
            }
            else {
               //rozne
            }
      }
}
0

Niestety niezbyt to działa. Próbowałem właśnie w podobny sposób ale się nie sprawdziło.

0

Bo wartości double są wartościami zmiennoprzecinkowymi i nie porównuje się ich przez == w żadnym języku programowania.
Rozwiązanie: if (Math.Abs(x - y) < 0.0000001), gdzie x i y to wartości double.
Ponadto, cena powinna być stałoprzecinkowego typu decimal, a nie double.

0

Sęk w tym, że ja jestem bardzo początkujący dopiero tydzień temu zacząłem się uczyć c# i właśnie nie za bardzo rozumiem co mam podstawić w miejsce x i y. Nie wiem jak wyrazić samo porównanie elementów w liście (typu element(n) == element(n+1), element(n+100) == element(n+200),) jeżeli mam n elementów. Z tablicą byłoby mi o wiele prościej ale chciałbym zrozumiem to zagadnienie za pomocą list.

dodanie znaczników `` - fp

0

Za x i y podstaw wartości, które chcesz porównać, więc chyba ksiazkaX.bookPrice i ksiazkaY.bookPrice.
I czym Twoim zdaniem różni się tablica od listy przy porównywaniu? W obu przypadkach możesz się odwoływać do elementów kolekcji przez indeksy.

0

Ok rozkminiłem ;)
Dziękuje za wskazówki i podpowiedzi ;)

 
foreach (BookShop ksiazkaX in ListOfBooks)
            {
                foreach (BookShop ksiazkaY in ListOfBooks)
                {
                    if (Math.Abs(ksiazkaX.bookPrice - ksiazkaY.bookPrice) < 0.0000001)
                        same = true;
                    else
                        same = false;
                }
            }

            if (same)
                Console.WriteLine("Wystepuja takie same ceny ksiazek");
            else
                Console.WriteLine("Wszystkie ksiazki maja rozne ceny");

I działa jak należy ;)

0

To, że robi to, co Ty chcesz, jeszcze nie znaczy, że to jest zrobione jak należy.

Po pierwsze, czemu sprawdzasz każdą książkę z każdą? Wszystkie książki, niezależnie od autora i tytułu muszą mieć jedną cenę?

Po drugie, skoro chcesz stwierdzić, czy wszystkie książki mają tą samą cenę, wystarczy znaleźć jedną, której cena się nie zgadza. Do tego nie trzeba porównania wszystkich książek, wystarczy przerwać pętlę przy pierwszej, która się nie zgadza.

0

Program ma za zadanie sprawdzić czy występują książki o tych samych cenach , więc zarówno mogą takie wystąpić ale nie muszą dlatego muszę porównać każdą książkę z każda. Także warunki są spełnione, faktycznie można przerwa pętle po spełnieniu warunku ale cóż jak wspomniałem dopiero się uczę wiec jestem otwarty na każda sugestię.

1 użytkowników online, w tym zalogowanych: 0, gości: 1