0 Daumen
5,6k 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

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:)

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

von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community