1. Az returnállítás

Úgy gondolja, hogy már mindent megtanult a Java módszerekről? Bármit is gondolsz tudni, a felét még mindig nem tudod.

Kezdjük valami egyszerűvel. Például a Java rendelkezik egy return utasítással, amely lehetővé teszi az őt hívó metódus azonnali leállítását. Íme a nyilatkozat:

return;

Egyszerű: a magányos szó, returnamelyet pontosvessző követ. Amint a program végrehajtja ezt az utasítást, az aktuális metódus azonnal kilép, és a hívás folytatódik.

Ha returna metódusban meghívásra kerül main, akkor a mainmetódus azonnal véget ér, és vele az egész program.

Példa:

class Solution
{
   public static void fill(int[] data, int from, int to, int value)
   {


     if (from < 0 || to > data.length)
       return;

     for (int i = from; i < to; i++)
     {
       data[i] = value;
     }
   }

   public static void main(String[] args)
   {
     int[] months = {1, 2, 3, 4, 5, 6, 7, 8 ,9, 10, 11, 12};
     fill(months, 2, 10, 8);
   }
}


A fill metódus kitölti az átadott tömb egy részét -val value.
A tömb kitöltendő részét a from és az indexek határozzák meg to.
Ha from kisebb, mint 0vagy ha to nagyobb, mint a tömb hossza, akkor a metódus azonnal leáll.

A fenti programnak van egy fillmetódusa, amely kitölti a neki átadott tömböt -val value. Nem tölti ki a teljes tömböt, csak az indexek fromés az indexek által meghatározott részt to.

A metódus elején fill az átadott értékeket ellenőrzik, hogy érvényesek-e. Ha fromkisebb, mint 0, vagy ha to nagyobb, mint a tömb hossza, akkor a fillmetódus azonnal leáll ( returnutasítást hajt végre).

Ez returnaz állítás hasznos: gyakorlatilag minden Java metódusnak van egy, és itt van miért.



2. Eredményes módszerek,void

Ne feledje, egyszer kitaláltuk, hogy vannak állítások, és vannak kifejezések . A kifejezésnek, ellentétben az állításokkal, van egy értéke, amely valahol használható.

A Java-ban pedig a metódusoknak lehet értéke . És ez nagyon jó hír: a metódusok nem csak a bemeneti paraméterek alapján képesek valamit csinálni, hanem például kiértékelni is valamit, és visszaadni a számítás eredményét .

Mellesleg már találkozott ilyen módszerekkel:

double delta = Math.abs(d1 - d2);
A abs()metódus duplát ad vissza
Scanner console = new Scanner(System.in);
int x = console.nextInt();

A nextInt()metódus egyint
String str = "Hello";
String s2 = str.toUpperCase();

A toUpperCase()metódus visszaadja aString
int[] data = {1, 4, 5, 6, 7, 8, 11};
int[] array = Arrays.copyOf(data, 4);

A copyOf()metódus egyint[]

Mindegyik metódus csak egy előre meghatározott típusú értéket adhat vissza. A visszatérési típus a metódus deklarálásakor kerül meghatározásra:

public static Type name(parameters)
{
  method body
}

Ahol name a metódus neve, parameters a metódusparaméterek listája és type a metódus által visszaadott eredmény típusa.

Azokhoz a metódusokhoz, amelyek semmit sem adnak vissza, van egy speciális helyőrző típus: void.

Saját metódusát írod, és nem akarsz semmit visszaadni a hívó metódushoz? Csak deklarálja a metódus típusát void, és a probléma megoldódik. A Java-ban is sok ilyen módszer létezik.


3. Eredmény visszaadása

Csak most találtuk ki, hogyan deklaráljunk egy olyan metódust, amely egy számítás eredményét adja vissza, de hogyan adjuk ezt az eredményt magában a metódusban?

A returnkijelentés itt is segítségünkre van. A módszer eredményének átadása így néz ki:

return value;

Hol returnvan egy olyan utasítás, amely azonnal leállítja a metódust. És value ez az az érték, amelyet a metódus visszatér a hívó metódushoz, amikor kilép. A típusnak valuemeg kell egyeznie typea metódus deklarációban megadottal.

1. példa: A módszer kiszámítja a két szám minimumát:

int min(int a, int b)
{
   if (a < b)
     return a;
   else
     return b;
}
A metódus a minimum két számot adja vissza.

Ha a < b
visszaküld a
Ellenkező esetben
visszab

2. példa: A metódus megduplázza a neki átadott karakterláncot n:

String multiple(String str, int times)
{
   String result = "";
   for (int i = 0; i < times; i++)
     result = result + " "+ str;
   return result;
}
A metódus két paramétert vesz igénybe – egy karakterláncot és azt, hogy hányszor kell a karakterláncot megismételni.
Egy üres karakterlánc jön létre a jövőbeni eredményhez.

Az iterációkkal rendelkező ciklusban timesegy szóköz és a strkarakterlánc hozzáadódik a resultkarakterlánchoz.

A karakterlánc resulta metódus eredményeként kerül visszaadásra.

3. példa: A módszer a maximum két számot számítja ki a háromtagú operátor segítségével:

int max(int a, int b)
{
   return (a > b ? a : b);
}
A metódus maximum két számot ad vissza.

vissza (ha a > b, akkor a, különben b)