Metode - posredovanje parametrov in vračanje rezultatov

Metode


Javanska metoda je zaporedje stavkov, ki opravljajo  neko pogosto nalogo.  Namesto, da bi  zaporedje na primer10 vrstic neprestano ponavljali, jih vstavimo v metodo, ki jo kličemo z eno samo vrstico. To je kot nekakšna bližnjica.

Zamislimo si, da bi pogosto morali izpisovati naš naslov, morda s temi stavki:

System.out.println("Janez Novak");
System.out.println("Ljubljana");
System.out.println("Slovenija");
System.out.println("Evropska Unija");
System.out.println("Planet Zemlja");

  

Lahko vse to vstavimo v metodo, kot na primer:

 
public static void izpisNaslova(){
System.out.println("Janez Novak");
   System.out.println("Ljubljana");
   System.out.println("Slovenija");
   System.out.println("Evropska Unija");
   System.out.println("Planet Zemlja");
}

  

Ko želimo izpis naslova, enostavno pokličemo to metodo oziroma zapišemo le:

 
   izpisNaslova();

Pri vsakem takem klicu dobimo na zaslonu naslednji izpis:


Janez Novak
Ljubljana
Slovenija
Evropska Unija
Planet Zemlja

Pa napišimo tak program:

public class Opomin{
    public static void main(String[] args){
        // klicemo metodo
        izpisNaslova();
        System.out.println("Dolgujes mi 100 EURO");
    }
        
    // metodo deklariramo izven metode main 
    // vendar znotraj zavitih oklepajev razreda
    public static void izpisNaslova(){
System.out.println("Janez Novak");
       System.out.println("Ljubljana");
       System.out.println("Slovenija");
       System.out.println("Evropska Unija");
       System.out.println("Planet Zemlja");
}
}

 


Prevedi to datoteko  (javac Opomin.java) in izvajaj prevedeni program ( java Opomin). Kakšen izpis dobiš ? 

Kako metoda vrača rezultat

Spomnimo se, da je imela naša prva metoda v svoji deklaraciji besedico "void". "void" pomeni, da ne vrača ničesar. Metoda lahko izvede vrsto računanj ali drugih nalog,. Če želimo, da po teh izvajanjih dobimo nek rezultat, ki ga metoda vrne, moramo to v deklaraciji metode navesti. Tako bo na primer metoda


public int getXposition()

vrnila neko celoštevilčno vrednost (podatek tipa int). Poglejmo si primer:

public class Povrsina{
        public static void main(String[] args){
                int dolzina = 10;
                int sirina  = 5;
                // poklicemo metodo za izracun povrsine...
                int pov = izracunPovrsine();
                System.out.println( pov);
               }
               // deklaracija metode...
               public static int izracunPovrsine(){
                       int povrsinaLika = dolzina * sirina;
                       return povrsinaLika;
               }
}



Kakšen izpis dobimo? sNaj bi bil  50. Navedba metode izracunPovrsine() je enaka 50 ! Rezultat metode lahko prepišemo v neko spremenljivko (kar smo storili v našem primeru) ali pa metodo uporabimo neposredno, na primer tako:


System.out.println("Povrsina = " + izracunPovrsine());

      

kar je povsem isto kot :

 

    System.out.println("Povrsina = " + pov); 

 

Metoda lahko vrne podatke kateregakoli tipa. Lahko je to podatek tipa doublebooleanString . Kaj še?
Nekaj primerov:


Kako metodi posredujemo argumente

Metode sprejemajo podatke z uporabo argumentov. To izgleda na primer tako:


public class Vesoljcek{
    int posX;
     int posY; 

    public void setXlokacija(int x){
        posX = x;
    }
}

Ta metoda sprejme kot vhodni podatek (argument) celo število, ki je opisano v deklaraciji (int x). Argumenti so lahko podakti kateregakoli tipa. Lahko so double, int, String , char, boolean, itd. itd. Zgornja metoda omogoča uporabniku razreda Vesoljcek, da nastavi lokacijo x vesoljcka in ga s tem verjetno premakne.

Uporabnik razreda Vesoljcek bi lahko naredil novega vesoljcka in ga postavil na želeno lokacijo:


Vesoljcek yukky = new Vesoljcek();
yukky.setXlokacija(150);

S tema stavkoma bi naredili novega vesoljcka z imenom yukky in ga postavili na lokacijo 150. 

Še en primer:


public void izracunDavka(double znesek){
        davek = znesek * 0.20;
}

Radi bi imeli spremenljivko double davek, ki je deklarirana v telesu razreda. Metodi bi radi posredovali znesek, ta pa bi izračunala davek. Lahko bi jo klicali tako:


double davek;
izracunDavka(350.00);
System.out.println(davek);

Kakšen izpis bi dobili s temi nekaj vrsticami kode? Tip podatka,, ki nga posredujemo kot argument, mora biti enak tipu v deklaraciji metode. Če metodo na primer deklariramo tako : 

public void setVisina (int  v);

je ne moremo uporabiti tako:

setVisina (35.50); // ne, ne, posredujemo podatek tipa double... napaka, napaka!

ali tako :

setVisina ("Potovanje v sredisce Zemlje"); // ne ne ne . ne mesajmo int in String!

Kar poskusi posredovati napačen tip argumenta dani metodi. Dobil boš obvestilo o napaki. Ne verjameš? Poskusi sam!.

Posredovani argumenti morajo biti pri klicu metode enakega tipa in v enakem zaporedju, kot so pri deklaraciji metode:


// deklaracija nase metode
public void setTekmovalec(int num1 , String ime1){
        tocke = _num1;
        ime = name1;
}

Ta metoda nastavi najprej celoštevilčni podatek in nasto niz. Ker moramo posredovati argumente v pravilnem vrstnem redu MORAMO metodo klicati na naslednji način:

 setTekmovalec (27,"Janez");

Dobili bi obvestilo o napaki, če bi jo poskusili klicati tako: setTekmovalec("Janez", 27);
Imamo lahko poljubno število argumentov, vendar se moramo držati pravilnega zaporedja.

Kako metoda vrača podatek (rezultat)

Ugotovili smo že, da lahko metoda podatek tudi vrača. Na primer:


public int izracunPovrsina(int sirina, int visina){
        int povrsina = sirina * visina;
        return povrsina;
}

 

Tako metodo lahko kličemo na primer na naslednji način:

povrsinaHise = izracunPovrsine (20, 30);

povrsinaVrta = izracunPovrsine ( 30, 50);

Izračunana povrsinaHise bi tako bila enaka 600, povrsinaVrta pa 1500.

V naslednji lekciji bomo spoznali razrede in kako jih uporabljamo