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

Java Lista porównanie elementów

Object Storage Arubacloud
0 głosów
1,101 wizyt
pytanie zadane 6 maja 2019 w Java przez Roman1212 Początkujący (460 p.)
edycja 6 maja 2019 przez Roman1212
Jak porównać dwa elementy  z listy.A dokładnie chodzi mi że mam prostokąty o bokach a i b i chcę porównać np. bok a pierwszego prostokąta z bokiem a drugiego prostokąta.
komentarz 6 maja 2019 przez Zibi Obywatel (1,220 p.)
Trochę za mało informacji podałeś. Czy prostokąt to klasa, która ma pola reprezentujące boki a i b? Jeśli tak to wystarczy zaimplementować w niej metodę equals().
komentarz 6 maja 2019 przez Roman1212 Początkujący (460 p.)
Prostokąt jest klasą.Tylko nie wiem jak pobrać element np a chodzi mi o coś takiego:

int a1 = a.lista.get(0);

System.out.println("Pierwszy element listy to: "+a1);

int a2 = a.lista.get(1);

System.out.println("bok a: "+a2);

if(a1==a2
1
komentarz 7 maja 2019 przez Arkadiusz Fajdek Dyskutant (9,450 p.)

@Roman1212, Hej! Wydajesz się osobą która dopiero zaczyna przygodę z programowaniem :) ostatnio piszę kurs dla osób początkujących w Javie. Wpis o listach znajdziesz tu: https://technologicznasowa.pl/kolekcje-listy/

Jeśli wrzucił byś kod gdzieś na jakieś repozytorium (np. GitHub) to byłbym w stanie Ci pomóc :)

2 odpowiedzi

0 głosów
odpowiedź 9 maja 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args){
        List<Prostokat> prostokats = new ArrayList<>();
        prostokats.add(new Prostokat(3,4));
        prostokats.add(new Prostokat(3,6));

        System.out.println(prostokats.toString());
        //zwroci 0 = logiczne true
        System.out.println(Integer.compare(prostokats.get(0).getA(),prostokats.get(1).getA()));
        //zwroci -1= logiczne false
        System.out.println(Integer.compare(prostokats.get(0).getB(),prostokats.get(1).getB()));
    }
}
class Prostokat{
    int a; //dlugosc boku a
    int b; //dlugosc boku b

    public Prostokat(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

    @Override
    public String toString() {
        return "Prostokat{" +
                "a=" + a +
                ", b=" + b +
                '}';
    }
}

 

komentarz 9 maja 2019 przez mbabane Szeryf (79,280 p.)

Interfejs komparator (Comparator) nie działa tak dokładnie jak być może sugeruje Twój opis. On może wskazać trzy stany: większy, równy lub mniejszy. Jego głównym przeznaczeniem jest wskazanie w jaki sposób mają być sortowane elementy w kolekcji. Pierwsze zdanie z javadoc'a:

A comparison function, which imposes a total ordering on some collection of objects.

Tak więc użycie go w taki sposób jak prezentujesz wydaje mi się, że nie jest zbyt dobrym pomysłem, bo przykładowo kiedy zrobisz tak:

Integer.compare( prostokats.get(1).getB(), prostokats.get(0).getB() );
//zamiana miejsc

Takie coś zwróci 1.

Wyciąg z dokumentacji, na temat metody Integer.compare:

Returns:
the value 0 if x == y; a value less than 0 if x < y; and a value greater than 0 if x > y

 Zdecydowanie prościej jest zrobić to poprzez operator ==:

System.out.println(prostokats.get(1).getB() == prostokats.get(0).getB()); 
//dla danych z przykladu false (nawet po zamianie miejsc)

Wówczas będziesz miał tylko dwa stany: true lub false  i nie musisz dodatkowo interpretować wyniku. Komparatorem musisz jeszcze określić (interpretować), że 0 to true, a coś innego to false.

komentarz 11 maja 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
Bardzo sluszna uwaga, dziekuje za poprawienie mojej odpowiedzi.
0 głosów
odpowiedź 10 maja 2019 przez Huberto Początkujący (340 p.)
Poczytaj o interfejsach Comparable i Comparator to powinno rozwiać twoje wątpliwości.
komentarz 10 maja 2019 przez mbabane Szeryf (79,280 p.)

To zależy.

Jeśli ma to służyć do sortowania wtedy tak, ponieważ te interfejsy zostały do tego zaprojektowane.

Natomiast jeśli coś innego to nie do końca może być to dobry wybór. Bo w javie jest jeszcze coś takiego jak metoda equals, zwracająca boolean i to może posłużyć do stwierdzeń, czy obiekty są takie same czy nie.

Metody z Comparable lub z Comparator mają zasadniczo zwracać trzy stany (w postaci liczby całkowitej) tak, żeby możliwe było odpowiednie sortowanie. Zerknij na komentarz w tym wątku do odpowiedzi pawi125.

komentarz 10 maja 2019 przez Huberto Początkujący (340 p.)
No racja, zapędziłem się.

Ale to tylko potwierdza, że warto chyba jednak przerobić solidnie te podstawy, bo kolekcje niewątpliwie nimi są niż od razu brać się za pisanie kodu tak jak gość z tą grą na 1300 linijek gdzie większość mechaniki to println i pierdyliard ifów...
komentarz 10 maja 2019 przez mbabane Szeryf (79,280 p.)
Na pewno warto jest szerzej zapoznać się z rzeczami, z których się korzysta, tak aby, w pewnym stopniu, używać ich świadomie i z właściwym przeznaczeniem. Poniekąd uczenie się na zapas (na zasadzie a może kiedyś się przyda) nie koniecznie jest dobrym wyjściem. W szczególności kiedy nie zna się zbyt dobrze (w pewnym stopniu biegle) elementów, z których aktualnie się korzysta. Zdecydowanie też, warto poszerzać horyzonty, jednak w odpowiednim czasie (żeby to nie było na zasadzie, "napisałem hello world w javie, więc czas na springa").. Dobrze jest też znać miejsca/czy nawet ludzi (np. internet, książki) gdzie dane zagadnienie można zweryfikować (np. javadoc).

Podobne pytania

0 głosów
1 odpowiedź 543 wizyt
pytanie zadane 4 lutego 2019 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
1 odpowiedź 508 wizyt
pytanie zadane 9 lipca 2019 w Java przez magicznyukf Początkujący (260 p.)
+1 głos
3 odpowiedzi 950 wizyt
pytanie zadane 27 sierpnia 2017 w Java przez Patryk Moros Początkujący (470 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...