CroNk3r uto 15.11.2016 19:02
cale kaže...

Pojam Abstract class.Shvacam kako funkcionira. No ne vidim neke velike prednosti koristenja,kao i apstraktne metode.Jedino sto mi sada ovako pada na pamet,da kada radim novu klasu koja je produzetak Apstraktne klase,da me podsjeti koje metode moram imati i definirati.Zanima me da znam da li da se zadrzavam na tom poglavlju ili da idem na neke druge "bitnije stvari".

Dosta su korisne kada kreiras puno klasa koje su prakticki iste jer ne moras raditi isti posao vise puta.

Ako radis one labose koje sam ti poslao, to ti je vidljivo dosta dobro kroz labos di radit "football managera"

Sve ovisi na sta naletis kasnije u zivotu, mozda ce ti biti apsolutno beskorisne, a mozda ces ih koristiti skoro svaki dan.

 

Ako se mene pita jako su korisne, jedina stvar je da moras razmisljati unaprijed kad programiras di ju mozes uvaliti da ti olaksa posao.

Arto uto 15.11.2016 20:01
cale kaže...

Pojam Abstract class.Shvacam kako funkcionira. No ne vidim neke velike prednosti koristenja,kao i apstraktne metode.Jedino sto mi sada ovako pada na pamet,da kada radim novu klasu koja je produzetak Apstraktne klase,da me podsjeti koje metode moram imati i definirati.Zanima me da znam da li da se zadrzavam na tom poglavlju ili da idem na neke druge "bitnije stvari".

Prilično bitna stvar jer ne da te podsjeća da moraš imati, nego nasljeđivanjem takve klase ti jamčiš da tvoja izvedena klasa sadrži te metode. Dobro za polimorfizam - imaš neku metodu koja prima referencu na životinju, a ti joj daješ objekte pse, mačke, štakore... i svaka ta klasa mora imati primjerice metodu makeSound() koju onda implementira na vlastiti način. Ne samo to, nego osiguravaš da nitko ne može instancirati osnovnu klasu, korisno ako nema smisla da postoje objekti. Slična je stvar oko definiranja takvih ugovora i sa sučeljima, ali različita je namjena i mogućnosti koje ti stoje na raspolaganju. Sučelje definira ugovor o ponašanju, a apstraktna klasa može sadržavati i podatke i definicije metoda koje su zajedničke svim izvedenim klasama, dok sučelje ima samo deklaracije metoda koje si dužan implementirati. Opet, u Javi možeš naslijediti samo jednu klasu, dok sučelja možeš implementirati i više.

cale pet 18.11.2016 15:01

 

Uglavnom trebao bi nastaviti program koji je zapocet:

 

 

public class Inner_class {

static class TreeNode{
TreeNode left;
TreeNode right;
String data;
}



public static void main(String[] args){

TreeNode node = null;
node = insert(node, "Jasna");
node = insert(node, "Ana");
node = insert(node, "Ivana");
node = insert(node, "Anamarija");
node = insert(node, "Vesna");
node = insert(node, "Kristina");
System.out.println("Writing tree inorder:");
writeTree(node);
node = reverseTreeOrder(node);
System.out.println("Writing reversed tree inorder:");
writeTree(node);
int size = sizeOfTree(node);
System.out.println("Number of nodes in tree is "+size+".");
boolean found = containsData(node, "Vesna");
System.out.println("Searched element is found: "+found);

 

OVAKO JE ZADATAK ZADAN.OD MENE SE TRAZI DA NAPISEM FUNKCIJE KOJE SU GORE PODCRTANE



}

static boolean containsData(TreeNode treerot,String data){--------Ovaj dio koda mi stvara problem
String name="";
char[] letters=treerot.data.toCharArray();

for(int i=0;i<treerot.data.length();++i){

if (letters[i]!=','){
name+=letters[i];-----------Dodaje sva slova sve do prvog zareza,npr.(Ana,).Dobit cu name=Ana i to cu onda usporedivati s proslijedenim argumentom String data.
}
else{
if(name.matches(data)){--------------------U ovom dijelu koda,ako stavim IF(name==data),uvjet ne prolazi,no ako ga stavim s funkcijom matches(),uvjet prolazi.
return true;}
name="";}}
return false;

}
static void writeTree(TreeNode treerot){

print(treerot.data);

}

static int sizeOfTree(TreeNode treerot){
char [] letters=treerot.data.toCharArray();
int count=0;
for(char x:letters){
if(x==','){
++count;
}
}
return count+1;
}
static TreeNode insert(TreeNode treerot,String data){
if (treerot==null){
treerot=new TreeNode();
treerot.data=data;
return treerot;}

treerot.data+=","+data;
return treerot;

}

static TreeNode reverseTreeOrder(TreeNode treerot){
int first_count=0;
char[] letters=treerot.data.toCharArray();
for (char x:letters){
if (x==','){
++first_count;
}

}


int size_of=treerot.data.length();
int comma_count=0;
int temp_comma_count=size_of;
String reverse_order="";
for(int first=0;first<first_count+1;++first){
for(int second=0;second<size_of;++second){
if (letters[second]==','&& second<temp_comma_count){
comma_count=second;}}
temp_comma_count=comma_count;
comma_count=0;
if(temp_comma_count==0){
temp_comma_count=-1;
reverse_order+=treerot.data.substring(temp_comma_count+1, size_of);}
else{
reverse_order+=treerot.data.substring(temp_comma_count+1, size_of)+',';}
size_of=temp_comma_count;}



treerot.data=reverse_order;

return treerot;
}

}

cale ned 4.12.2016 00:00

pitanje u vezi Map-a.

 

Zanima me na koji nacin mogu upisati elemente key/value odmah pri deklaraciji mape,da ne moram stalno koristiti funkciju put();

Nesto tipa kao kod pythona:

dictionary={"test":1};

 

 

1domagoj1 ned 4.12.2016 00:29
cale kaže...

pitanje u vezi Map-a.

 

Zanima me na koji nacin mogu upisati elemente key/value odmah pri deklaraciji mape,da ne moram stalno koristiti funkciju put();

Nesto tipa kao kod pythona:

dictionary={"test":1};

Ne. Ako pogledas dokumentaciju vidjet ces da ne postoji konstruktor koji bi takvo nesto radio.

Trebalo je nesto takvo doci u Javi 8, ali nije, tako da nije moguce. Ostaje ti napraviti sam nesto, ovdje mozes vidjeti par prijedloga.

 

Ili ako imas vec listu, mozes napraviti nesto ovako:

List<Item> list;
Map<Key,Item> map =newHashMap<Key,Item>();
for(Item i : list) map.put(i.getKey(),i);

 

Dakle, samo okines jednu for petlju. Drugo mi nista ne pada na pamet.

Bobobo-bo Bo-bobo ned 4.12.2016 09:55
Arto kaže...
cale kaže...

Pojam Abstract class.Shvacam kako funkcionira. No ne vidim neke velike prednosti koristenja,kao i apstraktne metode.Jedino sto mi sada ovako pada na pamet,da kada radim novu klasu koja je produzetak Apstraktne klase,da me podsjeti koje metode moram imati i definirati.Zanima me da znam da li da se zadrzavam na tom poglavlju ili da idem na neke druge "bitnije stvari".

Prilično bitna stvar jer ne da te podsjeća da moraš imati, nego nasljeđivanjem takve klase ti jamčiš da tvoja izvedena klasa sadrži te metode. Dobro za polimorfizam - imaš neku metodu koja prima referencu na životinju, a ti joj daješ objekte pse, mačke, štakore... i svaka ta klasa mora imati primjerice metodu makeSound() koju onda implementira na vlastiti način.

Ovo je tipičan primjer kada umjesto apstraktne klase treba koristiti interface. Ako (kad) se program proširi klasama koje isto mogu prozvoditi zvuk (imaju metodu makeSound) , ali nisu životinje (npr. Vodopad, Klavir ili Grom) sustav više ne drži vodu bez refaktorizacije, ili proglašavanja Klavira podvrstom Životinje.

Arto ned 4.12.2016 10:02
Bobobo-bo Bo-bobo kaže...
Arto kaže...
cale kaže...

Pojam Abstract class.Shvacam kako funkcionira. No ne vidim neke velike prednosti koristenja,kao i apstraktne metode.Jedino sto mi sada ovako pada na pamet,da kada radim novu klasu koja je produzetak Apstraktne klase,da me podsjeti koje metode moram imati i definirati.Zanima me da znam da li da se zadrzavam na tom poglavlju ili da idem na neke druge "bitnije stvari".

Prilično bitna stvar jer ne da te podsjeća da moraš imati, nego nasljeđivanjem takve klase ti jamčiš da tvoja izvedena klasa sadrži te metode. Dobro za polimorfizam - imaš neku metodu koja prima referencu na životinju, a ti joj daješ objekte pse, mačke, štakore... i svaka ta klasa mora imati primjerice metodu makeSound() koju onda implementira na vlastiti način.

Ovo je tipičan primjer kada umjesto apstraktne klase treba koristiti interface. Ako (kad) se program proširi klasama koje isto mogu prozvoditi zvuk (imaju metodu makeSound) , ali nisu životinje (npr. Vodopad, Klavir ili Grom) sustav više ne drži vodu bez refaktorizacije, ili proglašavanja Klavira podvrstom Životinje.

 Istina, s obzirom da je riječ samo o ponašanju, slažem se da mi primjer nije dobar i da je ovdje nužno koristiti interface.

cale uto 6.12.2016 16:02

knjiga iz koje ucim mi je na engleskom i tesko mi shvatiti generics i zasto su "losi" odnosno negativne strane genericsa.Spominje se pojam erasure. Sad koliko sam ja shvatio problem kod genericsa je kad napises:

 

public <A> void test(A objekt){}

 

-ja sad ne mogu dohvatiti ostale funkcije ovog objekta,ako sam dobro shvatio on ovaj A tretira kao "Object".

 

-ako napravim:

public <A extends Test> void test( A objekt){}----na ovakav nacin sam si opet suzio opseg objekata koji su mi dozvoljeni staviti.

 

Zanima me da li se na to odnosi kada se spominje pojam "erasure"?