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

Osnovni program, razlika izmedju void i return

[es] :: Java :: Osnovni program, razlika izmedju void i return

[ Pregleda: 5789 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

miljannet
Rakita Miljan
Crvenka

Član broj: 321026
Poruke: 56
2001:4c28:4000:721:185:26:18..



+3 Profil

icon Osnovni program, razlika izmedju void i return05.04.2014. u 19:36 - pre 121 meseci
Pozdravim imam ovde jedna zadatak koji radim, cilj zadatka je da pokaze kako radi metoda void i return pa imam pitanja :)

Prvi zadatak:
code:
Code:

class Kutija3
{
    double sirina;
    double visina;
    double dubina;
    void zapremina()
    {
        System.out.print("Zapremina je: ");
        System.out.println(sirina*visina*dubina);
    }
}
public class PrimerZaKutiju3 
{
    public static void main(String args[])
    {
        Kutija3 mojaKutija1 = new Kutija3();
        Kutija3 mojaKutija2 = new Kutija3();
        
        // Dodeljivanje vrednosti promenljivama isntance  objekta mojaKutija1
        mojaKutija1.sirina=10;
        mojaKutija1.visina=20;
        mojaKutija1.dubina=15;
        
        /* dodeljuje drugacije vrednosti
         * promenljivama objekta mojaKutija2
         */
        
        mojaKutija2.sirina=3;
        mojaKutija2.visina=6;
        mojaKutija2.dubina=9;
        
        // Prikazuje zapreminu prve kutije
        
        mojaKutija1.zapremina();
        
        // Prikazuje zapreminu druge kutije
        
        mojaKutija2.zapremina();
        
    }
}


Drugi zadatak:
code:
Code:

class Kutija4
{
    double sirina;
    double visina;
    double dubina;
    double zapremina()
    {
        return sirina*visina*dubina;
    }
}
public class PrimerZaKutiju4 
{
    public static void main(String args[])
    {
        Kutija4 mojaKutija1 = new Kutija4();
        Kutija4 mojaKutija2 = new Kutija4();
        double zapremina;
        
        // dodeljuje vrednosti promenljivama instanci objekta mojaKutija1
        mojaKutija1.sirina=10;
        mojaKutija1.visina=20;
        mojaKutija1.dubina=15;
        
        /* Dodeljuje drugacije vrednosti
         * promenljivama objekta mojaKutija2 */
        
        mojaKutija2.sirina=3;
        mojaKutija2.visina=6;
        mojaKutija2.dubina=9;
        
        // Prikazuje zapreminu prve kutije
        
        zapremina= mojaKutija1.zapremina();
        System.out.println("Zapremina je: "+zapremina);
        
        // Prikazuje zapreminu druge kutije
        
        zapremina= mojaKutija2.zapremina();
        System.out.println("Zapremina je: "+zapremina);
    }
}


Tacnije ovaj deo da izdvojim
code:
Code:


void zapremina()
    {
        System.out.print("Zapremina je: ");
        System.out.println(sirina*visina*dubina);
    }
 


code:
Code:

double zapremina()
    {
        return sirina*visina*dubina;
    }


Razlika izmedju void i return je to sto, kada radimo sa void rezultat mora biti ispisan na ekranu ? Mislim razumem da je to metoda koja mnozi, sirina*visina*dubina iz ove klase. Pa se kasnije samo ocita. kao sto sam napisao mojaKutija1.zapremina(); I onda ocita vrednost

A kada radimo sa return ne moramo ispisati vrednost ako necemo, tj ako radimo sa void moramo odma ispisati vrednost ne mozemo nista da radimo sa njom, dok sa return mozemo da radimo sta god hocemo ? Zanima me jos ovaj deo kad smo napisali:

double zapremina() - kada ne oznacimo da je void onda se podrazumeva da je return ? I stavili smo double zato sto su i promenljive u klasi tipa double ? To bi bilo to :) Ovo je bilo samo da vidim da li sam shvatio razlike izmedju ove dve metode. :)
 
Odgovor na temu

Rapaic Rajko
Bgd

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



+62 Profil

icon Re: Osnovni program, razlika izmedju void i return06.04.2014. u 09:46 - pre 121 meseci
Uh...

1) Rec void znaci da funkcija/metod NE vraca nikakvu vrednost; drugim recima, upotreba sluzbene reci return u telu metode tipa void nije dozvoljena (compile time error).
2) Bilo koji drugi tip (non void) metode, znaci OBAVEZNU upotrebu (bar jednom) sluzbene reci return u telu metode; izostavljanje iste takodje povlaci compile time error.
3) Navedeni kod/linija system.out() iz tvog primera je tu SLUCAJNO, i nema NIKAKVE veze s tim da li je funkcija tipa void ili ne.

Pozz
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.239.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Osnovni program, razlika izmedju void i return06.04.2014. u 10:21 - pre 121 meseci
1) Može se navesti return u void metodi, ali bez rezultata, što dovodi do povratka iz funkcije (koja ne vraća vrednost, pa se izvršava samo zbog side efekata - kao što je ispisivanje na ekran):

Code:
void f(){ return; }


Auf, sad vidim šta si sve pitao :).

Dakle - funkcije koje vraćaju vrednost (one koje ti pogrešno nazivaš return) u opštem slučaju primaju neke vrednosti (ili ih čitaju iz polja klase) i vraćaju rezultat. Trebalo bi da izbegavaš da u tim funkcijama radiš bilo šta osim toga, odnosno, da menjaš stanje programa (side efekti - npr. ispisivanje na ekran dovodi do nepovratnog menjanja stanja, jer si nešto ispisao), jer ako ne menjaš ništa, onda te funkcije sa istim parametrima možeš pozvati nebrojeno mnogo puta i garantovano je da će uvek vratiti isti rezultat, što može biti jako korisno (a prepoznaćeš i gde, kada stigneš to toga, da ne komplikujemo sada). I to ti je zapremina() - samo računa zapreminu i vraća. Kako program koji ne prikazuje ništa korisniku, ili ne zabeležava svoje rezultate nigde uglavnom malo znači, napravljene su metode koje se izvršavaju samo zbog tih side efekata (i one ne vraćaju rezultat). Jedan takav primer ti je tvoja zapremina u Kutiji3. Verovatno zabunu uvodi nesretna nomenklatura - ta metoda se prirodnije zove ispisiZapreminu.


Da imaš nešto ovako:

Code:
class Kutija
{
      int w, h, d;

      public int zapremina(){ return w * h * d; }
      public void ispisiZapreminu(){ System.out.println(zapremina()); }

}


verovatno bi bilo jasnije.

Citat:
double zapremina() - kada ne oznacimo da je void onda se podrazumeva da je return ? I stavili smo double zato sto su i promenljive u klasi tipa double ? To bi bilo to :) Ovo je bilo samo da vidim da li sam shvatio razlike izmedju ove dve metode. :)



Ne, kada ne staviš void, onda moraš da staviš nešto drugo, inače se neće kompajlirati :). A iz bilo koje non-void metode možeš da vratiš vrednost korišćenjem return vrednost; iskaza. Na osnovu te vrednosti, mi smo stavili double, jer je rezulat koji se vraća sa return tipa double:


Code:
double foo(){ return 1.5; }



I to nema veze sa promenljivama u klasi, već samo sa konačnim izrazom koji se vraća sa return. Npr. ovo će ti vratiti string:


Code:
String zapremina() { return String.valueOf(duzina * visina * sirina); }


[Ovu poruku je menjao Burgos dana 06.04.2014. u 11:36 GMT+1]
 
Odgovor na temu

miljannet
Rakita Miljan
Crvenka

Član broj: 321026
Poruke: 56
2001:4c28:4000:721:185:26:18..



+3 Profil

icon Re: Osnovni program, razlika izmedju void i return06.04.2014. u 21:54 - pre 121 meseci
Izvinite momci, ali nisam uspeo da razumem sta ste pokusavali da mi objasnite...Iskreno ne znam ni sam da vam kazem sta mi nije jasno. Tek sam naucio sta su klase a sta objekti.. I sledeca dva zadatka su bila sa void i return, napisao sam vam kod. Knjiga mi iskreno nije pomogla nesto jer ne mogu da razumem objasnjenje, ne znam da li je lose objasnjeno ili ja ne mogu da skontam sta hoce da mi kazu :) Zelite li da vam ispisem tekst koji ide uz ova dva koda ? Hitno mi treba pomoc da savladam sta je sta, posto pise u knjizi da bi krenuo na dalje o klasama i objektima moram da se uvezbam sa ovim prvo a nisu mi dali neke zadatke ili nesto sto bi mi olaksalo. :) Mozete li mi vi reci iz vaseg iskustva kako ste savladali ovaj deo, ili da mi pokusate objasniti svojim recima ? Hvala vam mnogo. :)

Ps: Moze i neki koristan link, pa da procitam :))
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.239.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Osnovni program, razlika izmedju void i return06.04.2014. u 22:42 - pre 121 meseci
Nadji bolju knjigu :). Evo ti najgluplji primer. Recimo da imaš klasu koja omogućava računanje površine četvorougla, dohvatanje imena tog četvorougla (kao string) i ispisivanje svega toga na ekran.

Za izračunavanje površine imaćemo jednu funkciju (dakle, to je ono što se sa return nešto vraća), kao i za dohvatanje imena objekta. Za ispisivanje ne treba ništa da vraćamo, pa ćemo to pozvati u proceduri (sa void kao povratnim tipom):



Code:

class Cetv
{
    int a, b;
    String ime;


    public Cetv(int a, int b, String ime)
    {
       this.a = a;
       this.b = b;
       this.ime = ime;
    }


    int povrsina(){ return a * b; } // int zato sto a * b (u returnu) ima tip int
    String dohvatiIme(){ return ime; } // zato sto u return iskazu ucestvuje ime, koje ima tip String


    void ispis(){ System.out.println(dohvatiIme()); System.out.println(povrsina()); } // obrati paznju kako koristimo vrednost koju su nam funkcije 
                                                                                                                // povrsina i dohvatiIme vratile!

}



Nadam se da je jasnije!
 
Odgovor na temu

casperns2
Full Stack Java Web Developer
Novi Sad

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



+45 Profil

icon Re: Osnovni program, razlika izmedju void i return06.04.2014. u 23:46 - pre 121 meseci
Evo mojim recima kako sam ja to razumeo. Nadam se da ce malo pomoci a ako nesto nisam u pravu ispravice iskusni...
Kao sto Burgos rece probaj sa drugom knjigom ili sajtom i kod koji je dao za primer je mnogo razumni nego onaj tvoj iz knjige(onaj primer sa zapreminom imam osecaj kao da ima za cilj da zbuni a ne da objasni razliku)

Imas dve vrste metoda: 1. Metode bez povratne vrednosti
Code:
public void setGodiste(int g){
       godiste=g;
}


Kada objekat pozove metod void on ce da uradi nesto sa objektom koji pozove tu metodu i njegovim promenljivim sa kojim je definisan, da ih dodeli nove vrednosti ,ili samo vrednost jedne promenljive da promenis, sta god pozelis u telu metoda mozes pisati i kodirati sto je po pravilima i na kraju kada se zavrsi metod i sve funkcije u telu metoda , sve sto si zeleo da metod uradi to ce biti uradjeno , napravljeno, izmenjeno ali ti neces to videti tada i nece ti se vratiti neka vrednost pri pozivanju tog metoda sa kojom bih mogao nesto da radis dalje u kodu (povratna vrednost) vec se samo izvrse zahtevi koje si definisao u telu metoda(promena godista...)

2. Metode sa povratnom vrednoscu public TIP PODATAKA getGodiste(){.... RETURN .}
Code:
public int getGodiste(){
    return godiste;
}

Sa drugom vrstom metoda koju kada pozoves ti dobijas povratnu vrednost koju mozes koristiti u kodu ili drugim metodama...gde god pozelis i gde god ti zatreba ta vrednost, znaci pozivanjem te metode ti na tom mestu dobijas povratnu vrednost koja je definisana posle return i sa njom radis sta hoces ili je mozes dodeliti nekoj novoj promenljivoj.
Na primer u drugom kodu imas int godiste povratnu vrednost(neki broj) i kada god ti zatreba to godiste u programu pozoves taj metod,dobijes zeljeni broj(godiste)kao povratnu vrednost i sa njom uradis sta zelis.

 
Odgovor na temu

miljannet
Rakita Miljan
Crvenka

Član broj: 321026
Poruke: 56
2001:4c28:4000:721:185:26:18..



+3 Profil

icon Re: Osnovni program, razlika izmedju void i return09.04.2014. u 16:31 - pre 121 meseci
Skontao sam sada. Kada pogledam sta me zbunjivali, osecam se glupim, tako je prosto ! Kad ocu da radim nesto sa nekim podatkom, tj da mi se vrati vrednost koristim return, a kada ocu samo da se izvrsi i da mi ne vrati nista koristim void. Jednostavno :)
 
Odgovor na temu

anon323100
Poreska uprava

Član broj: 323100
Poruke: 2
212.200.74.*



+1 Profil

icon Re: Osnovni program, razlika izmedju void i return13.05.2014. u 11:20 - pre 120 meseci
Pozdrav,
void znači da metoda ne vraća nikakvu vrednost. Dalje, bitno je da to usvojiš u praksi i da znaš kada ćeš upotrebiti. Ako metod treba nešto da ti uradi a ne treba ti neki rezultat kao povratna informacija u daljem programskom kodu, tj. niti jedan drugi metod neće potraživati tu vrednost odnosno njegov rad neće zavisiti od nje, koristićeš void. Kada nije naveden void, onda metoda vraća vrednost i navodi se tip vrednosti koji se očekuje. Njen rezultat onda možeš upotrebiti u daljem toku izvršavanja programa. Npr neka druga metoda je analizira, skladišti itd.
 
Odgovor na temu

alfa-pro
Pancevo

Član broj: 241818
Poruke: 476
*.dynamic.sbb.rs.



+7 Profil

icon Re: Osnovni program, razlika izmedju void i return13.05.2014. u 12:07 - pre 120 meseci
Druze nema tu neke matematike oko ovoga. Kolega ti je gore u 3 reda lepo napisao.

Isto kao u c++, ako metoda ima tip int ili double ona mora da vrati isti tip (return int) dok sama void metoda ne vraca nikakvu vrednost. U slucaju da postavis return dobices compail error.
Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
 
Odgovor na temu

dule_ns
Novi Sad

Član broj: 123863
Poruke: 257
194.247.212.*



+690 Profil

icon Re: Osnovni program, razlika izmedju void i return14.05.2014. u 07:31 - pre 120 meseci
Naravno da void metode mogu da imaju return i neće se desiti nikakva compile time error.

Može neko da smatra da je to loša praksa ali u javi je to sasvim dozvoljeno.
 
Odgovor na temu

[es] :: Java :: Osnovni program, razlika izmedju void i return

[ Pregleda: 5789 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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