Przekazywanie wyniku funkcji dotyczą innych funkcji

0

Witam chciałbym żeby ktoś bardziej doświadczony mógłby mi wytłumaczyć ten wiersz kodu return min(min(min(a, b), c), d);, rozumiem że wywołuje tu metodę najbardziej zagnieżdżona, która przyjmuje argumenty a i b, oraz zwraca wartość, i ta wywołana metoda staje się argumentem ze zwrócona wartością dla zewnętrznej metody? i tak dalej?

public class Solution {
    public static int min(int a, int b, int c, int d) {
        return min(min(min(a, b), c), d);
    }

    public static int min(int a, int b) {
        int m;
        if (a < b)
            m = a;
        else
            m = b;

        return m;
    }

    public static void main(String[] args) throws Exception {
        System.out.println(min(-20, -10));
        System.out.println(min(-20, -10, -30, -40));
        System.out.println(min(-20, -10, -30, 40));
        System.out.println(min(-40, -10, -30, 40));
    }
}
3
min(min(min(a, b), c), d)

pierwszy argument: min(min(a, b), c) -> return z min(a, b) to pierwszy argument "pierwszego argumentu (zagnieżdżonego min)"
drugi argument: d

1

rozumiem że wywołuje tu metodę najbardziej zagnieżdżona, która przyjmuje argumenty a i b, oraz zwraca wartość, i ta wywołana metoda staje się argumentem ze zwrócona wartością dla zewnętrznej metody? i tak dalej?

Tak; najpierw ewaluowane jest min(a, b) (załóżmy, że zwraca XXX), potem min(XXX, c) (załóżmy, że zwraca YYY) i na końcu min(YYY, d), ostatecznie znajdując najmniejszą spośród czterech liczb.

2

Kod

public static int min(int a, int b, int c, int d) {
    return min(min(min(a, b), c), d);
}

to jest to samo co

public static int min(int a, int b, int c, int d) {
  int pierwszaMniejsza = min(a, b);
  int drugaMniejsza = min(pierwszaMniejsza, c);
  int trzeciaMniejsza = min(drugaMniejsza, d);
  return trzeciaMniejsza;
}
Virus_ napisał(a):

i ta wywołana metoda staje się argumentem ze zwrócona wartością dla zewnętrznej metody? i tak dalej?

No nie i tak dalej. W przykładzie który podałeś, to nie będzie i tak dalej tylko dokładnie 4 razy, bo bo metoda przyjmuje 4 argumenty.

0

jakbyś chciał rozszerzyć swoją funkcję do szukania min w większej ilości argumentów możesz posllużyć się vargs czyli typ ...nazwaZmiennej to taka ukryta tablica (new int[]{1,2,3,...}) a następnie użyć Stream Api, ale to już trochę szerzej ;)

import java.util.stream.IntStream;

static int min(int ...args) {
    return IntStream.of(args).min().orElseThrow(IllegalArgumentException::new);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1