to fakt niedawno zacząłem. Pracowałem wcześniej na kompilatorze blueJ i tam używanie metod było dużo łatwiejsze a netbeans jest bardziej rozbudowanym środowiskiem i staram się go opanować dopiero.
Mam jeszcze jedno pytanie. W jaki sposób pobrać parametr do metody.
Przykładowo taki kod:
public class tr {
public static int oblicz(int x)
{
if(x==1) return x;
else
return x+oblicz(x+1);
}
}
w blueJ było poprostu dać uruchom metodę i pytało o wpisanie parametru, jeżeli w kodzie, w metodzie było przykładowo medota(double x). Jak to się odbywa w netbeans?
public class tr {
public static void main(String[] args){
int z=oblicz(-10);
}
public static int oblicz(int x){
if(x==1)
return x;
else
return x+oblicz(x+1);
}
}
program nie pokazuje w nim błędów. Po uruchomieniu pokazuje tylko napis: run: BUILD SUCCESSFUL (total time: 0 seconds) a nie widać nigdzie zwracanego wyniku, jest coś źle zapisane w kodzie, czy gdzie odczytać zwracany wynik? bo np. jak dam
int z=oblicz(4);
powinno zwrócić liczbę 10
a wyrzuca wyjątki:
Exception in thread “main” java.lang.StackOverflowError
Przecież wyraźnie napisane StackOverflowError - błąd przepełnienia stosu
przy wywołaniu: int z=oblicz(4);
zostaje wywołane oblicz(4),
które z kolei wywoła oblicz(5),
które z kolei wywoła oblicz(6),
…
i tak dalej
do wykonania
if(x==1) return x;
praktycznie nigdy nie dojdzie, to znaczy doszło by po przepełnieniu int’a ale w tym czasie na stosie musiało by się zgromadzić coś kolo 32 GB danych. Oczywistym jest że komputer niema tyle pamięci nie wspominając już o tym że stos zwykle jest ograniczony do kilku KB.
To jak to jest. W kompilatorze blueJ zwraca dla poszczególnie prowadzonych wartości do metody odpowiednie im wyniki. Przykładowo dla 4 zwróci 10, a netbeans jest błąd przepełnienia. Dlaczego tak się dzieje ?
był błąd w kodzie. zamian x+oblicz(x+1) miało być x+oblicz(x-1).
i jeszcze ostatnie pytanie. Dlaczego jak uruchomię w funkcji main tą metodę, np oblicz(5) to nie pokazuje nigdzie jaki wynik jest zwracany? tylko po przyciśnięciu run wyskakuje komunikat :