• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c# - przeciążony operator <

VPS Starter Arubacloud
0 głosów
593 wizyt
pytanie zadane 3 kwietnia 2020 w C# przez kingof Początkujący (310 p.)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            Lwymierna l1 = new Lwymierna(3, 5);
            Lwymierna l2 = new Lwymierna(2, 5);
            
            
            Console.WriteLine(l1 < l2);
            
            
            
            Console.ReadKey();
        }
        class Lwymierna
        {
            public int licznik =0;
            public int mianownik =1;
            public Lwymierna(int licz, int mian)
            {
                licznik = licz;
                mianownik = mian;
            }
            public Lwymierna(int licz)
            {
                licznik = licz;

            }
            public Lwymierna()
            {
                mianownik = 0;
            }
            public void wypiszUlamek()
            {
                Console.WriteLine(licznik + "/" + mianownik);
            }
            
            public static bool operator >(Lwymierna l1,Lwymierna l2)
            {

                if ((l1.licznik / l1.mianownik) > (l2.licznik / l2.mianownik))
                {
                    return true;
                }
                else
                
                    return false;
                
            }
            public static bool operator <(Lwymierna l1, Lwymierna l2)
            {

                
                if ((l1.licznik/l1.mianownik) < (l2.licznik/l2.mianownik))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }










        }
    }
}

Mógłby mi ktoś powiedzieć dlaczego cały czas wyskakuje false? ;(

2 odpowiedzi

+1 głos
odpowiedź 3 kwietnia 2020 przez adrian17 Ekspert (344,100 p.)
wybrane 3 kwietnia 2020 przez kingof
 
Najlepsza
            Lwymierna l1 = new Lwymierna(3, 5);
            Lwymierna l2 = new Lwymierna(2, 5);
            Console.WriteLine(l1 < l2);

Tu oczywiście jest false, bo 3/5 > 2/5 ;) Ale zakładając inne porównania, faktycznie masz buga:

if ((l1.licznik/l1.mianownik) < (l2.licznik/l2.mianownik))

Dzielenie liczb całkowitych daje liczbę całkowitą. Czyli 3/5 == 0. A 0<0 jest false.

Spróbuj zamienić liczby na zmiennoprzecinkowe, to porównanie będzie poprawne. Przy okazji tego if'a można uprościć:

return (1.0*l1.licznik/l1.mianownik) < (1.0*l2.licznik/l2.mianownik);

Lub

return ((double)l1.licznik/l1.mianownik) < ((double)l2.licznik/l2.mianownik);

 

komentarz 3 kwietnia 2020 przez kingof Początkujący (310 p.)
Dziękuje!
–4 głosów
odpowiedź 3 kwietnia 2020 przez Mondonno Początkujący (280 p.)
edycja 3 kwietnia 2020 przez adrian17

Spróbuj usunąć po co ci on? Po drugie lepiej opisz problem. Wyskakuje ci jakiś błąd/wyjątek? 

komentarz 3 kwietnia 2020 przez kingof Początkujący (310 p.)
No na tym chyba polega przeciążanie operatorów ,że tam musi być ten znak?xd

Żadnego błędu mi nie pokazuje, poprostu zawsze wyskakuje zawsze false
komentarz 3 kwietnia 2020 przez JakSky Stary wyjadacz (14,770 p.)
Ciekawe pytanie, bo na pierwszy rzut oka wygląda ok.
komentarz 3 kwietnia 2020 przez adrian17 Ekspert (344,100 p.)
Mondonno, wyrzuciłem reklamę, bo jest nie na miejscu.

A inna sprawa, że proponuję się więcej zastanowić przed dawaniem takich odpowiedzi...

Podobne pytania

0 głosów
0 odpowiedzi 159 wizyt
pytanie zadane 7 lutego 2017 w C i C++ przez czujek22 Dyskutant (7,670 p.)
0 głosów
1 odpowiedź 212 wizyt
pytanie zadane 20 października 2016 w C i C++ przez Kasztan Dyskutant (8,080 p.)
0 głosów
3 odpowiedzi 610 wizyt
pytanie zadane 16 maja 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)

92,454 zapytań

141,262 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...