Forum » Programiranje » [Java] Comparable in starostni razredi
[Java] Comparable in starostni razredi
marjan_h ::
Sortirati moram osebe, prednost imajo otroci do 15 let nato starejši nad 65 leti. Če kateri spada v isto starostno skupino, se sortira po spolu; prednost imajo punce.
Na takšen način bi moral zajeti vse možne kombinacije, kar je preveč kode in še težko se bere. Zanima me kako bi stvar hitreje in bolje naredil?
public class Oseba implements Comparable<Oseba>{ String ime; int starost; char spol; public int compareTo(Oseba o){ if ((this.starost < 16) && ( 16 < o.starost && o.starost < 65)){ return -1; } else if ((o.starost < 16) && ( 16 < this.starost && this.starost < 65)){ return 1; } else if ((this.starost > 65) && (16 < o.starost && o.starost < 65)){ return -1; } //... in tako naprej } }
Na takšen način bi moral zajeti vse možne kombinacije, kar je preveč kode in še težko se bere. Zanima me kako bi stvar hitreje in bolje naredil?
Mavrik ::
Tako da boljše organiziraš primerjave in narediš metode:
Oštevilčiš starostne skupine in uporabiš dejstvo, da se 0, 1, 2 pač posortirajo v ta vrstni red a ne? :)
To je načeloma tudi v spolšnem ok pravilo: če se znajdeš v tem, da pišeš dolge klobasaste if pogoje, se ti verjetno splača narediti metodo, ki poenostavi branje kode.
private static int starostnaSkupina(Oseba o) { if (o.starost < 16) return 0; if (o.starost > 65) return 1; return 2; } public int compareTo(Oseba o) { if (starostnaSkupina(this) == starostnaSkupina(o)) { return this.jePunca() ? -1 : 1; } return starostnaSkupina(this) - starostnaSkupina(o); }
Oštevilčiš starostne skupine in uporabiš dejstvo, da se 0, 1, 2 pač posortirajo v ta vrstni red a ne? :)
To je načeloma tudi v spolšnem ok pravilo: če se znajdeš v tem, da pišeš dolge klobasaste if pogoje, se ti verjetno splača narediti metodo, ki poenostavi branje kode.
The truth is rarely pure and never simple.
Zgodovina sprememb…
- spremenil: Mavrik ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java] Podatkovni tipOddelek: Programiranje | 3831 (3483) | piki12 |
» | [Java] Sortiranje razredovOddelek: Programiranje | 1461 (1208) | Spura |
» | [C#] DeserializacijaOddelek: Programiranje | 1869 (1472) | Cvenemir |
» | c# primerjava vrednosti dveh tipov object (brez da vem kateri tip sta)Oddelek: Programiranje | 1113 (900) | Looooooka |
» | [Java] Sortiranje objektovOddelek: Programiranje | 2858 (2858) | tjaz24 |