Czy jest ktoś w stanie wyjaśnić dlaczego:
public class Solution {
public static int min(int a, int b, int c) {
if (a <= b && a <= c)
{
return a;
}
else if (b<=c && b<=a)
{
return b;
}
else if (c <=a && c <=b)
{
return c;
}
}
jest błędne a
użycie instrukcji "else" jest poprawne ?
dlaczego "else" nie "else if"
Dyskutowane
Komentarze (2)
- Popularne
- Najnowsze
- Najstarsze
Musisz się zalogować, aby dodać komentarz
Mariusz
16 sierpnia 2020, 14:37
Są tylko trzy możliwości, czyli jedna z trzech liczb jest najmniejsza (ewentualnie równa innej). Więc jak sprawdzisz dwa warunki:
- porównasz czy liczba a jest mniejsza lub równa dwóm pozostałym
- porównasz czy liczba b jest mniejsza lub równa dwóm pozostałym
to wtedy już wiadomo, że jeśli te dwa nie są spełnione, to prawdziwy musi być trzeci, czyli:
- że liczba c jest mniejsza lub równa dwóm pozostałym - TEGO NIE TRZEBA JUŻ SPRAWDZAĆ.
Dlatego nie jest potrzebny kolejny warunek IF. Dodatkowo jeśli metoda coś zwraca, to MA COŚ ZWRÓCIĆ. A jeśli ostatni warunek nie zostanie spełniony, to co zwróci metoda? NIC? Czyli musi być jeden RETURN bez warunków. Więc zamiast ostatniego warunku 'else if (c <=a && c <=b)' wystarczy 'else'.
A najlepiej jak w ogóle nie będzie 'else', bo i tak są niepotrzebne. Jeśli w pętli występuje RETURN, to oznacza, że metoda się kończy coś zwracając, więc nic się po niej nie wykona. Ostatecznie można to krótko zakodować tak:
----------------------------------------------
if (a <= b && a <= c) {
return a;
}
if (b<=c && b<=a) {
return b;
}
return c;
----------------------------------------------
Pozdrawiam!
+6
Paweł
17 sierpnia 2020, 21:38
Dzięki wielkie za czytelne i zrozumiałe wyjaśnienie.
Pozdrawiam
0