1. Operatorreturn

Myślisz, że nauczyłeś się już wszystkiego o metodach w Javie? Tak czy inaczej, nadal nie znasz połowy z tego.

Zacznijmy od czegoś prostego. Na przykład Java ma polecenie (operator) return , które pozwala na natychmiastowe zakończenie metody, w której została wywołana. Wygląd drużyny:

return;

Wszystko: tylko jedno słowo returni średnik. Gdy tylko program wykona to polecenie, praca bieżącej metody natychmiast się zakończy, a praca metody wywołującej będzie kontynuowana.

Jeśli returnzostanie wywołana metoda main, metoda mainnatychmiast się zakończy, a wraz z nią cały program.

Przykład:

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);
   }
}


Metoda fill wypełnia część przekazanej tablicy wartością value.
Część tablicy jest zdefiniowana przez indeksy from i to.
Jeśli from jest mniejsza 0lub to większa niż długość tablicy, metoda kończy się natychmiast.

Powyższy program posiada metodę fill, która wypełnia przekazaną do niego tablicę wartością valuei wypełnia nie całą tablicę, ale jej część określoną przez indeksy fromi to.

Na początku metody fill sprawdzane jest, czy przekazywane do niej wartości są poprawne. Jeśli fromjest mniejsza niż 0 lub towiększa niż długość tablicy, to metoda fill kończy się natychmiast (wywołuje polecenie return).

Przydatną rzeczą jest ten operator return: jest w prawie każdej metodzie w Javie, a oto dlaczego.



2. Funkcje z wynikiem,void

Pamiętaj, kiedyś analizowaliśmy, że są polecenia, ale są wyrażenia . A wyrażenie, w przeciwieństwie do polecenia, ma wartość, której można użyć w dowolnym miejscu.

Tak więc w Javie metody mogą mieć znaczenie . I to jest bardzo dobra wiadomość: metody mogą nie tylko zrobić coś w zależności od parametrów, ale też np. coś obliczyć i zwrócić wynik obliczeń .

Nawiasem mówiąc, czy spotkałeś się już z takimi metodami:

double delta = Math.abs(d1 - d2);
Metoda abs()zwraca podwójną wartość
Scanner console = new Scanner(System.in);
int x = console.nextInt();

Metoda nextInt()zwraca wartość typuint
String str = "Cześć";
String s2 = str.toUpperCase();

Metoda toUpperCase()zwraca wartość typuString
int[] data = {1, 4, 5, 6, 7, 8, 11};
int[] array = Arrays.copyOf(data, 4);

Metoda copyOf()zwraca wartość typuint[]

Każda metoda może zwrócić tylko jedną wartość i jeden predefiniowany typ. Zwracany typ jest określany podczas deklarowania metody:

public static тип Nazwa(параметры)
{
   kod метода
}

Gdzie Nazwa to nazwa metody, параметры to lista parametrów metody i тип typ wyniku zwracanego przez metodę.

W przypadku metod, które nic nie zwracają, istnieje specjalny typ kodu pośredniczącego - void.

Czy piszesz własną metodę i nie chcesz zwracać niczego do metody wywołującej? Wystarczy zadeklarować typ metody voidi problem zostanie rozwiązany. Istnieje również wiele takich metod w Javie.


3. Zwrócenie wyniku

Właśnie wymyśliliśmy, jak zadeklarować metodę z wynikiem obliczenia / pracy, ale jak możemy zwrócić ten wynik z samej metody?

Aby to zrobić, ponownie potrzebujemy operatora return. Przekazanie wyniku z metody wyglądałoby tak:

return oznaczający;

Gdzie returnjest instrukcja, która natychmiast zakończy działanie metody. A oznaczający to wartość, którą metoda powinna w rezultacie zwrócić metodzie wywołującej. Typ значенияmusi być zgodny z typem типомokreślonym podczas deklarowania metody.

Przykład 1. Metoda oblicza minimum z dwóch liczb:

int min(int a, int b)
{
   if (a < b)
     return a;
   else
     return b;
}
Metoda zwraca minimum dwie liczby.

Jeśli a < b
powrót a
W przeciwnym razie
powrótb

Przykład 2. Metoda duplikuje przekazany do niej łańcuch nrazy:

String multiple(String str, int times)
{
   String result = "";
   for (int i = 0; i < times; i++)
     result = result + " "+ str;
   return result;
}
Metoda przyjmuje dwa parametry - ciąg znaków oraz liczbę jego powtórzeń.
Dla przyszłego wyniku tworzony jest pusty łańcuch.

W cyklu timesczasu
do łańcucha resultdodawana jest spacja i ciąg znaków str.
Zmienna jest zwracana jako wynik metody result.

Przykład 3: Metoda oblicza maksymalnie dwie liczby za pomocą operatora trójskładnikowego:

int max(int a, int b)
{
   return (a > b ? a : b);
}
Metoda zwraca maksymalnie dwie liczby.

powrót (jeżeli a > b, to a, inaczej b)