Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Koji rezultat je na izlazu?

[es] :: Java :: Koji rezultat je na izlazu?

[ Pregleda: 2971 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.dynamic.sbb.rs.



+45 Profil

icon Koji rezultat je na izlazu?22.03.2014. u 15:41 - pre 122 meseci
Code:
public class Test
{
public static void main(String ar[])
{
int a=2;
a=a++;
a=a++;
System.out.println(a);
}
}



Sta se dobija za izlaz?
Ovo sam video na internetu... vodi se diskusija sta se dobija na izlazu, sta vi mislite...

[Ovu poruku je menjao casperns2 dana 22.03.2014. u 21:01 GMT+1]
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
..ppoe.dyn.broadband.blic.net.



+62 Profil

icon Re: Koji rezultat je na izlazu?22.03.2014. u 16:16 - pre 122 meseci
Bogami zanimljivo...

Nisam hteo da probam u javi, ali jesam se podsetio prioriteta operatora. I, zbunilo me: mislio sam da ce se prvo izvrsiti dodeljivanje a = a, pa tek onda increment a (a++). Medjutim, NE - operator '++' ima veci prioritet od operatora '='. Ali i u jednom i u drugom slucaju, meni se cini logicnim da ce 'a' izaci na vrednost 4. Gresim li?

Pozz
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
..ppoe.dyn.broadband.blic.net.



+62 Profil

icon Re: Koji rezultat je na izlazu?22.03.2014. u 16:20 - pre 122 meseci
Ili je ceo stos u ovome

Code:
public static void main(String ar[])


To nije dobro, ispravno je

Code:
public static void main(String[] ar)


Daklem..?

Pozz
 
Odgovor na temu

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.dynamic.sbb.rs.



+45 Profil

icon Re: Koji rezultat je na izlazu?22.03.2014. u 16:32 - pre 122 meseci
Pa iskreno ne znam, nisam strucnjak ali meni je logicno da je 4 . Cak i na internetu gde se diskutuje ima dosta razlicitih misljenja pa ni sam ne znam sta je tacno.... ali meni je logicno da ce na kraju na izlazu "a" biti 4 ... zato sam i postavio ovde da vidim jel zaista to izlaz...
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Koji rezultat je na izlazu?22.03.2014. u 19:38 - pre 122 meseci
Pa jel nije bilo jednostavnije da probaš?

http://ideone.com/OA02wm

ps koristi [code] tagove kad kačiš kod.
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.234.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Koji rezultat je na izlazu?22.03.2014. u 19:54 - pre 122 meseci
Rešenje je 2, kao što je jablan pokazao. Operator postinkrementa povećava vrednost operanda za 1, ali vraća njegovu staru vrednost. 4 će se ispisati ako se upotrebi operator preinkrementiranja koji će vratiti inkrementiranu vrednost:

Code:
public class Test
{
public static void main(String[] ar)
{
    int a=2;
    a=++a;
    a=++a;
    System.out.println(a);
}
}
 
Odgovor na temu

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.dynamic.sbb.rs.



+45 Profil

icon Re: Koji rezultat je na izlazu?22.03.2014. u 19:58 - pre 122 meseci
Probao sam odmah i dobio sam dva, stim sto mi nije jasno kako a i znatizeljan sam da znam zasto 2 a ne 4 .

Rekao sam da je meni ovo izgledalo da je 4 , pre nego sto sam pustio da masina izracuna. Mada necu razbijati glavu oko ovoga ali skroz mi je interesantno... :)

 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.234.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Koji rezultat je na izlazu?22.03.2014. u 20:06 - pre 122 meseci
Neka je a = 1, b = 0;

Nakon b = a++;

b = 1 (stara vrednost od a), a = 2 (inkrementirana vrednost a0)
 
Odgovor na temu

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.dynamic.sbb.rs.



+45 Profil

icon Re: Koji rezultat je na izlazu?22.03.2014. u 20:44 - pre 122 meseci
ali ako dodas jos jedno
b=a++

onda ce b primiti vrednost od a uvecanu za +1 iz prvog reda

b=0 , a=1

b=a++ // b=1 a=2
b=a++ //b=2 a=3
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Koji rezultat je na izlazu?23.03.2014. u 11:38 - pre 122 meseci
Dakle:

Code:
a = a++


radi sledeće korake:

1) računa izraz sa desne strane (rezultat je 2)
2) izvršava inkrementiranje (a dobija vrednost 3)
3) izvršava dodelu (a opet dobija vrednost 2)

kvaka je dakle u tome što se inkrementiranje dešava nakon računanja izraza, a pre dodele.

(inače, još jedan dokaz da su bez potrebe prekomplikovali Javu)

ps koristi code tagove
 
Odgovor na temu

blekmor
fax
fax

Član broj: 309532
Poruke: 55
*.dynamic.sbb.rs.



+30 Profil

icon Re: Koji rezultat je na izlazu?23.03.2014. u 23:56 - pre 122 meseci
Operator ++ je višeg prioriteta nego = (operator dodjele). Kada znaš ovo, sasvim je jasno da će vrijednost promeljive a na kraju ostati nepromjenjena. Evo objašnjenja

Code:
a=a++

kako je operator ++ prioritetniji od operatora dodjele, on će prvi i da se izvrši. Znači prvo se izvršava
Code:
a++

operator ++ će da uveća vrijednost promeljive za 1, ali će da vrati staru vrijednost(tako je definisan).
Operator dodjele će promeljivoj sa lijeve strane(a) da dodjeli vrijednost izraza sa desne strane(a++). Kako je vrijednost izraza sa desne strane 2 (operator ++ je vratio 2, staru vrijednost, bez obzira što ju je u medjuvremenu uvećao za 1), u promeljivu a upisujemo tu vrijednost, te je a opet = 2.

Primjer je baš vještački, ali se iz njega mogu naučiti neke stvari.

Inače, operator dodjele je operator najnižeg prioriteta. To ti na prvu loptu možda izgleda neobično (ipak je dodjela jako važna, mnogo važnija od ++) ali prioritet operatora nema veze sa tim šta je "važno" ili šta se češće koristi. Prioritet operatora je tako postavljen kako bi programi bili čitljiviji, jasniji i lakši za kompajliranje(to je već posebna priča). Ukoliko bi operator dodjele imao viši prioritet od nekog drugog operatora (npr operatora +), onda izraz
Code:
b=c+d

ne bi imao smisla, nego bi morali pisati
Code:
b=(c+d)

što je glupo.

Citat:
jablan:
(inače, još jedan dokaz da su bez potrebe prekomplikovali Javu)

Odužio sam ovo objašnjenje kako bih skrenuo pažnju @jablan da je ponašanje Jave u ovom slučaju tačno po definiciji i intuiciji(naravno, programerskoj intuiciji).

@casperns2
Da li ti je sada ovo jasnije? Da li ti je jasno zašto bi rezultat na kraju bio 4, ukoliko bi umjesto
Code:
a=a++

koristili
Code:
a=++a

?

pozdrav
 
Odgovor na temu

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.dynamic.sbb.rs.



+45 Profil

icon Re: Koji rezultat je na izlazu?24.03.2014. u 08:39 - pre 122 meseci
Sada su razresene sve dileme, hvala svima na odgovorima, idem da borim sa javinim GUI...
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Koji rezultat je na izlazu?24.03.2014. u 10:57 - pre 122 meseci
Citat:
blekmor:
Odužio sam ovo objašnjenje kako bih skrenuo pažnju @jablan da je ponašanje Jave u ovom slučaju tačno po definiciji i intuiciji(naravno, programerskoj intuiciji).

Hm, pa upravo ovaj thread je dokaz da ponašanje NIJE intuitivno. A sve zato što su slepo preuzeli taj operator od C++, i pored toga što je jedini operator sa side-efektom (zapravo, kod sufiksnog oblika samo taj side-efekat i postoji). A čemu sve to? Samo da bi se uštedeo jedan karakter, u jeziku koji se inače baš i ne može pohvaliti sažetošću.
 
Odgovor na temu

blekmor
fax
fax

Član broj: 309532
Poruke: 55
*.dynamic.sbb.rs.



+30 Profil

icon Re: Koji rezultat je na izlazu?24.03.2014. u 12:06 - pre 122 meseci
Citat:
jablan: Hm, pa upravo ovaj thread je dokaz da ponašanje NIJE intuitivno. A sve zato što su slepo preuzeli taj operator od C++, i pored toga što je jedini operator sa side-efektom (zapravo, kod sufiksnog oblika samo taj side-efekat i postoji). A čemu sve to? Samo da bi se uštedeo jedan karakter, u jeziku koji se inače baš i ne može pohvaliti sažetošću.


Tačno, možda nije baš intuitivno ponašanje operatora ++ u ovom primjeru.
Taj operator uopšte nije neophodan, niti ga Java forsira u bilo kom smislu.
Po meni je sasvim korektna ušteda u konstrukciji tipa
Code:
a = b++


Primjer iz ovog threada je besmislen, te je bezveze "hejtovati" Javu na osnovu njega. Bogu hvala, Java ima mnogo drugih stvari na osnovu kojih se može "hejtovati", ali operator ++ nije jedna od njih.

pozdrav



 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Koji rezultat je na izlazu?24.03.2014. u 12:16 - pre 122 meseci
Dozvolićeš da imam drugačije mišljenje (i nisam usamljen u tome) - operatorima sa side-efektima nije mesto u Javi, niti u bilo kojem jeziku višeg nivoa. ++ ima smisla u C-u gde se manje više dobro mapira na mašinske instrukcije inkrementiranja, kao i na rad sa pointerima. U Javi nema puno smisla, ne donosi gotovo ništa, a komplikuje učenje i povećava mogućnost previđanja greške. Mogu čak reći da je najveći smisao ++ u Javi iživljavanje na intervjuima za posao. :)
 
Odgovor na temu

blekmor
fax
fax

Član broj: 309532
Poruke: 55
*.dynamic.sbb.rs.



+30 Profil

icon Re: Koji rezultat je na izlazu?24.03.2014. u 12:43 - pre 122 meseci
Bez operatora ++, for petlje bi ružno izgledale.:)

Šalu na stranu, apsolutno bih dijelio tvoje mišljenje ukoliko bi Java bila čisto objetni jezik. No kako su je već napravili kombinacijom svega i svačega, neka ga i operator ++, meni ne smeta.

pozdrav
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Koji rezultat je na izlazu?24.03.2014. u 13:09 - pre 122 meseci
Citat:
blekmor: Bez operatora ++, for petlje bi ružno izgledale.:)

Kad smo kod toga, da ne bude da samo pljujem, for-each petlje u Javi su dobra stvar (šteta samo što je autorima Jave trebalo 10 godina da ih se sete). U 90% slučajeva, for ionako služi za iteraciju kroz neku kolekciju.

[Ovu poruku je menjao jablan dana 24.03.2014. u 14:24 GMT+1]
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
..106.109.adsl.dyn.beotel.net.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Koji rezultat je na izlazu?25.03.2014. u 10:26 - pre 122 meseci
A evo potvrde i od gosn. Eric Lipperta:

Citat:
Lots of good answers here so I won't re-state what others have already said, except to emphasize that these operators are horrid features. They're very confusing; after over 25 years I still get pre- and post- semantics mixed up. They encourage bad habits like combining evaluation of results with production of side effects. Had these features not been in C/C++/Java/JavaScript/etc, they would not have been invented for C#.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Koji rezultat je na izlazu?25.03.2014. u 11:33 - pre 122 meseci
Hehe pa što ne okačiš link:

http://programmers.stackexchan...ncrement-operator-in-java-or-c

Odličan thread, hvala!
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
..106.109.adsl.dyn.beotel.net.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Koji rezultat je na izlazu?25.03.2014. u 11:34 - pre 122 meseci
Kontao sam da ćete proguglati :D. Šalim se - zaboravio sam!
 
Odgovor na temu

[es] :: Java :: Koji rezultat je na izlazu?

[ Pregleda: 2971 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.