Java razene a abstraktni trida – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Java razene a abstraktni trida – Java – Fórum – Programujte.comJava razene a abstraktni trida – Java – Fórum – Programujte.com

 

crash40
~ Anonymní uživatel
16 příspěvků
13. 12. 2012   #1
-
0
-

Cau mam abstraktni tridu od ktere dedi dalsi tridy. Pak mam tridu kde mam mnozinu tech potomku. A ted chci seradit ty potomky podle nejakej jejich spolecneho atributu. Kde mam presne implementovat comparator atd. Dik

Nahlásit jako SPAM
IP: 146.102.145.–
ingiraxo+15
Grafoman
13. 12. 2012   #2
-
0
-

Tak třída comparatoru bude ve vlastním souboru, ve který bude i to seřazení a samotné řazení bude tam, kde to potřebuješ seřadit

a implementace comparatoru bude u třídy, kterou chceš seřazovat

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
liborb
~ Redaktor
+18
Guru
13. 12. 2012   #3
-
0
-
Nahlásit jako SPAM
IP: 188.75.135.–
crash40
~ Anonymní uživatel
16 příspěvků
13. 12. 2012   #4
-
0
-

takze jestli to chapu spravne, tak budu muset implementovat metodu compareTo() v kazdem potomku?:)

Nahlásit jako SPAM
IP: 2001:718:1e02:8144::beef:...–
ingiraxo+15
Grafoman
13. 12. 2012   #5
-
0
-

#4 crash40
ano i ne, pokud implementuješ rozhraní Comparable, tak musíš implementovat funkci compareTo(...), kde si už vytvoříš nějaký porovnávací pravidlo

a rozhraní Comparable bude obsahovat pouze ten objekt, kterej se má porovnávat => bude mít funkci compareTo(..)

pokud implementujes Comparator, tak musíš implementovat compare(...)

v tvém případě bych doporučil první možnost

a teoreticky nemusíš implementovat nic a stačí přepsat equals(..), kterej se stará o porovnání objektů, případně si udělat vlastní funki, co nahradí tyhle rozhraní

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
crash40
~ Anonymní uživatel
16 příspěvků
14. 12. 2012   #6
-
0
-

Takze jestli to dobre chápu to rozhrani comparable bude obsahovat ten rodic :)

 

public abstract class Polozka implements Comparable <Polozka>
{
    protected String titul;
    protected String osoba;
    protected int delka;
    protected boolean vlastnim;
    protected String komentar;

...

public int compareTo(Polozka druha) {

        return titul.compareTo(druha.titul);
    }

}

ale kdyz to takle naimplementuji tak ne nefunguje:)

Nahlásit jako SPAM
IP: 176.97.9.–
ingiraxo+15
Grafoman
14. 12. 2012   #7
-
0
-

tohle ti jde skompilovat? pokud přepisujes nebo implementuješ nějakou funkci, tak nemůžeš měnit její deklaraci

pokud se nemílim, tak compareTo má parametr Object a uvnitř nepoužívej compareTo ale normální porovnání, pokud chceš ten titul, tak něco jako 





public int compareTo(Object obj) {
    return title.equals(((Polozka)obj).title) ? 0 : -1;
}

EDIT: ted jsem si vsim, ze ty implementujes Comparable<Polozka>, takze parametr bude jak máš Polozka, to co jsem psal je ciste jen implementace Comparable

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
crash40
~ Anonymní uživatel
16 příspěvků
15. 12. 2012   #8
-
0
-

to taky nefunguje:) neradi to:) ja mam jeste jednu tridu kde mam mnozitu objektu ten zdedenich trid. nemel bych to rozhrani comparable implementovat tam?:)

Nahlásit jako SPAM
IP: 176.97.9.–
ingiraxo+15
Grafoman
15. 12. 2012   #9
-
0
-

noo, jednoduchá ukázka základního compatable je treba...

import java.util.*;

class Main {
    public static void main(String[] args) {
        List<Human> humans = new ArrayList<Human>();
        
        humans.add(new Human("aaa", 20));
        humans.add(new Human("bbb", 15));
        humans.add(new Human("ccc", 30));
        humans.add(new Human("ddd", 25));
        
        Collections.sort(humans);
        
        for (Human h : humans) {
            System.out.println(h);
        }
    }
}

class Human implements Comparable<Human> {
    public String name;
    public int age;
    
    public Human(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public int compareTo(Human h) {
        return (age < h.age) ? 0 : 1;   // seradi vzestupne
        //return (age > h.age) ? 0 : 1; // seradi sestupne
    }
    
    public String toString() {
        return name + ", " + age;
    }
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
crash40
~ Anonymní uživatel
16 příspěvků
15. 12. 2012   #10
-
0
-

To vsechno mam ale stejne to nefunguje. Ta metoda se proste nezavola. Chapu to spravne ze musi ta metoda compareTo byt implementovana jen v rodici?

Nahlásit jako SPAM
IP: 176.97.9.–
ingiraxo+15
Grafoman
15. 12. 2012   #11
-
0
-

implementujes ji tam, kde ji potrebujes...

pokud potrebujes serazovat prvky podle neceho co je v rodici, tak ji das do rodice

pokud podle neceho co je pouze v potomku, tak ji das do potomku (zde si nejsem jistej, jestli se muzes odkazat na rodice pro vytvareni pole tech potomku)

pokud podle neceho co je v rodici, ale potom i podle neceho co je v potomku, tak do rodice a funkci potom znova prepises v potomku

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
crash40
~ Anonymní uživatel
16 příspěvků
17. 12. 2012   #12
-
0
-

Porad to nefunguje  

 public int compareTo(CD obj) {
       System.out.println("Porovnavam");
    return titul.equals(((CD)obj).titul) ? 0 : -1;
   }

tuhle metodu jsem vlozil do kazdeho potomka ale stejne se ta metoda ani nezavola. Nevite kde by mohl byt problem?

Nahlásit jako SPAM
IP: 146.102.144.–
crash40
~ Anonymní uživatel
16 příspěvků
17. 12. 2012   #13
-
0
-

Nehraje tam treba roly to ze ja si vytvorim pole objektu jeste v jine tride kde setuju ten vypis?:)

Nahlásit jako SPAM
IP: 146.102.144.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 20 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý