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

Lista instancji klas - porównanie konkretnego pola każdej instancji
MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
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

  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
foreach(BookShop ksiazkaX in ListOfBooks)
{
      foreach(BookShop ksiazkaY in ListOfBooks)
      {
            if (ksiazkaX.bookPrice == ksiazkaY.bookPrice) {
                //rowne
            }
            else {
               //rozne
            }
      }
}
MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

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

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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.

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
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

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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.

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

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

Kopiuj
 
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 ;)

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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.

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
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ę.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.