Zdravím, potřebuji vytvořit množinu červených čísel (z rulety) a následně zjistil zda se padlé číslo nachází v této množině. Nepotřebuji velké kusy kódu, opravdu mi jde jen o to, jak se zapisuje množina a jak se pak porovnává obyčejný integer s množinou...
Fórum › Java
Jak zjistím, zda je číslo z množiny?
#1 Martin
Ahoj, možností máš povícero. Můžeš například použít pole (předem víš kolik prvků v té množině budeš mít) a to pak postupně projít a porovnat hodnotu v poli s tou co "padla". Další z možností je použít některou z kolekcí (například List)...
Pouzi Set a v class-e prepis overridni hashcode() a equals().
class RouleteNumber {
// len v pripade ze RouleteNumber je immutable
// ak sa objekt da menit tak len vypocitas result a
// vratis hodnotu
private volatile int hashCode
private int number;
private Color color;
public RouleteNumber(int number, Colot color) {
this.number = number;
this.color = color;
}
public int getNumber() {
return this.number;
}
public Color getColot() {
return this.color;
}
@Override
// vypocita sa hash cislo, ktore identifikuje dany objekt
public int hashCode() {
int result = hashCode;
if (result == 0) {
result = 17;
result = 31 * result + number;
result = 31 * result + (color != null? color.hashCode(): 0);
hashCode = result;
}
return hashCode;
}
@Override
// metodu equals potrebujes ak dva objekty maju rovnaky hash
// v tom pripade sa vola equals a porovnavaju sa ich fieldy
public boolean equals(Object o) {
return o.getClass().equals(RouleteNumber.class) &&
((RouleteNumber) o).number == number &&
((RouleteNumber) o).color.equals(color);
}
}
// potom uz len niekde v kode staci
Set<RouleteNumber> setOfNumbers = new HashSet<RouleteNumber>();
// a mas cislo napr. r
setOfNumbers.contains(r); // toto vrati boolean
// K otazke
Set<RouleteNumber> setOfRedNumbers = new HashSet<RouleteNumber>();
setOfRedNumbers.contains(r); // vrati boolean ak sa tam nachadza
HashSet funguje so zlozitostou O(1). Lebo mas obrovsky array objektou. Vypocita sa hash a pomocou neho sa vypocita pozicia v poli. Ak viacero roznich objektov (equals dava false) ma rovnaky hash, tak sa vytvori linkedlist na danej pozici tychto objektov. Vyhoda je rychlost a to ze objekty nemusia byt z dobre usporiadanej mnoziny ako pre treeset (progrmatorsky: nemusia implementovat Comparable).
#4 Flowy
Ale nenapisal, ze zacina, alebo sa uci ako sa pouziva pole. Co ak vie, ako sa pouziva pole. Mozno hlada len riesenie tohto problemu, lebo sa s nim este nestretol. Pytal sa ako sa zapisuje mnozina a ako sa zistuje ci dany element patri do mnoziny. Na obe otazky som mu odpovedal + navod ako to ma urobit, aby to porovnavalo cislo a farbu a nie referencie. Cize nemyslim si, ze to bol sarkazmus. Ked bude velmi chciet moze si urobit vlastnu implementaciu Set-u. Napriklad tak, ze urobi to pole a za kazdym ho prebehne a porovna vsetky elementy metodou equals(Object o).
2 sleepy: Promiň, ale tvoje řešení je opravdu nad moje zkušenosti.
Navíc pokud jsi v javě zkušený, tak nechápu proč to děláš tak složitě, když to určitě musí jít mnohem jednodušeji.
Teď znovu: zjistil jsem (snad) jak udělat pole, takže mám toto
int[ ] cerveny = { 1, 3, 5, 7, 9, 12, 14, 16,18,19,21,23,25,27,30,32,34,36 };
ale pak potřebuji dát tu podmínku a obyčejné porovnání integeru s polem nefunguje
if(pocitac==cerveny) prostě nefunguje... takže jak na to?
#6 Martin
ono to neni az tak zlozite a co je hlavne je to ovela obecnejsie riesenie ktore sa da pouzit takmer na cokolvek (dal by sa pouzit hashtree aby si mohol mat rovnake prvky) ak ti nevadi ze prvky budu zoradene ... o tom je OOP - ak maju rozne objekty rovnaku vlastnost (v tomto pripade ze sa daju porovnavat) tak by pre ne malo existovat spolocne riesenie
ak by ti vadilo zoradenie prvkov tak sa da pouzit aj viac obecnejsie riesenie (pomocou Collection ktora v pripade zoradeneho zdroja vyuzije zoradenost ale podporuje aj nezoradene) ale hladanie v zoradenej kolekcii je rychle
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Jak zjistím zda je číslo celé nebo desetinné — založil hejnallukas
C++ - detekce zda do proměnné ukládám číslo zda písmeno — založil ls2015
Zjistěte, zda je dané kladné celé číslo prvočíslo. — založil Marek
Jak zjistím název buňky Cells(15,9) — založil clavien
Jak zjistím z kterého aliasu je volán web — založil ololol
Moderátoři diskuze