0 Daumen
6,9k Aufrufe

hallo,

wenn ich beispielsweise bei java eine rekursive funktion programmiere, wann muss ich in der main methode System. out println meine Funktion mit dem Parameter (also Methodenaufruf) einsetzen

muss ich meine funktion nur dann in System. out print ln einsetzen wenn ich zahlen habe? und was bewirkt es wenn ich einen Methodenaufruf im System. out println habe?

vielen dank im voraus

Avatar von

2 Antworten

0 Daumen

Also wenn du eine void Methode hast, also eine Methode ohne R├╝ckgabewert, dann kannst du mittels System.out.print(); etwas ausgeben, da du in void Methoden return nicht verwenden darfst.


Stell dir vor, du hast Fakult├Ąt rekursiv programmiert, wie hier gezeigt:

public class Example {

static void fakultaet_berechnen(int grenze){
long fakultaet = 1;

for(int zahl=1; zahl<=grenze; zahl++){
fakultaet = fakultaet * zahl;
}

System.out.println(fakultaet);
}

public static void main(String[] args) {
fakultaet_berechnen(2);
}

}

Dann gibt das Programm 2 aus. Aber wenn du jetzt das System.out.println(fakultaet); wegl├Ąsst, dann kommt nichts raus. Weil deine Methode fakultaet_berechnen nichts ausgibt.


Hoffe es ist jetzt klarer:)

Falls du noch Fragen hast, stell Sie ruhig:)

Avatar von

ja, danke erst einmal. Was mich nur verwirrt ist, dass in einem Beispiel, wo Fakult├Ąt berechnet wurde (auch rekursiv), mit if, if else und return, trotzdem mittels System.out.println die Funktion darin eingesetzt wurde. Und, dass, obwohl void nicht in der Funktion stand. Die Funktion war folgenderma├čen. public static int Fakult├Ąt(int n){

wie k├Ânnte ich die Vorgehensweise f├╝r dieses Beispiel verstehen?

vielen dank

Hab leider ├╝bersehen, dass ich es dir iterativ programmiert habe. Bei Felixus siehst du die rekursive Variante. Du brauchst das System.out.println() um etwas aus der Konsole ausgeben zu lassen. Zum Beispiel w├╝rdest du bei Felixus Implementierung das System.out.println() weglassen, dann w├╝rdest du auf der Konsole nichts ausgegeben bekommen:)


Hoffe, dass es klarer wurde:) Sonst melde dich:)

Ich glaube dich verwirrt das return.

Das Schl├╝sselwort "return" zeigt an, dass eine Methode hier abgebrochen wird, wenn eine Methode nicht vom Typ "void" ist muss hinter return noch der Wert stehen, dessen Typs die Methode ist. Also bei der public int Methode muss f├╝r jeden m├Âglichen Weg (bei bed. Anw. gibt es mehrere Wege: if und else) ein Integer zur├╝ckgegeben werden. Also muss bei der fak Methode nat├╝rlich ein return stehen, aber das bedeutet nicht, dass das in der Konsole ausgegeben wird. Um in die Konsole zu schreiben musst du die Methode System.out.println() aufrufen.

Nochmal als Verdeutlichung:

Eine Methode berechnet immer etwas. Also eine Integer Methode ist eine Methode, die etwas berechnet und dann hinterher eine Zahl zur├╝ckgibt.

Eine void-Methode berechnet auch, gibt aber kein Ergebnis zur├╝ck.

Daher das w├Ąre das vielleicht einleuchtender:

public class MyClass{
public static int fak(int n){
//Gebe folgenden Wert als Ergebnis zur├╝ck:
return (n<2)? 1 : n*fak(n);
}
public static void main(String[] args){
int fakultaetVon5 = fak(5);
System.out.println(""+fakultaetVon5);
}
}

0 Daumen

Die Methode von PseudoNYM funktioniert zwar, ist aber nicht rekursiv.

So k├Ânnte man deine Frage beantworten:

public class MyClass{
static int fac(int n){
return (n<2)? 1 : n*fac(n-1);
}
public static void main(String[] args){
System.out.println(""+fac(5));
}
}

Die 5 im Methodenaufruf von fac in der Maim-Methode kann nat├╝rlich mit jeder x-beliebigen anderen Zahl ersetzt werden, solange sie in der Fakult├Ąt nicht mehr als 2^32 ├╝berschreitet. Dann w├Ąre der Typ long angebracht: Methodenkopf und ├ťbergabeparamter-Typ ├Ąndern und es funktioniert.


Ich hoffe das beantwortet, wie man eine Methode vom Typ int in der Konsole ausgiebt. Wenn die Methode vom Typ void ist musst du die Methode etwas anders schreiben, dann kann man sie sich aber auch sparen, denn die Rekursion bringt keinen Zeitvorteil und es wird nur unn├Âtig un├╝bersichtlich, wenn noch eine weitere Methode auftaucht.


Beste Gr├╝├če

Felix

Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community