Nutzereingabe, Rekursion oder nicht

Moch

Bekanntes Mitglied
Hallo,
Ich schreibe derzeit zur Übung (Trimester ist ja bald wieder vorbei und dann kommen die Prüfungen wieder...) ein paar kleinere Programme (aus meiner Sicht zwar schon etwas größer, aber aus Eurer Sicht wird's winzig sein)
Unter Anderem sind es jetzt Programme, die interaktiv mit dem Benutzer umgehen. So habe ich beispielsweise eine per Nutzereingabe funktionierende While-Schleife (läuft ab, so lange der User bei jeder Abfrage wieder 'ja' eintippt, bricht ab bei 'nein'). Am Ende des Programms folgt meistens die Abfrage, ob der User das Spiel/Programm neu starten möchte. Dazu habe ich jetzt einmal eine Frage.

Erstmal ein (unvollständiges) Beispiel:
[Java]
import userFkt.Basis; //selbst geschriebenes Paket, um mir persönlich Schreibarbeit zu sparen)
public class Beispiel {
public static void main (String[] args){
Base alpha = new Base();
System.out.println("Möchten sie das Programm neustarten?");
System.out.println("Zum neustarten 'ja' (ohne ') eintippen, ansonsten 'quit'");
String s1 = alpha.eingabe(); //liest eine Nutzereingabe ein

if(s1.equals("ja")){
main(args);
}

}
}

[/Java]

Wie gesagt, hier nur ein unvollständiges und recht sinnfreies Beispiel.
Jetzt meine Frage dazu:

Entsteht hierbei eine Rekursion, die zu viele sinnlose Instanzen aufrechthält (nach einem Durchlauf ist diese ja nicht mehr nötig), wenn der User das Programm quasi endlos immer wieder aufruft?
Oder erkennt Java hier selbst, dass die älteren Instanzen unnötig sind und entfernt sie dann aus dem Speicher?

Ich bin normalerweise ein großer Freund iterativer Lösungen und mag Rekursionen nicht so gerne (spätestens seit Haskell *hasse* ich Rekursionen), aber hierbei gefällt mir die Variante ohne While-Schleife irgendwie besser (übersichtlicher).
Dennoch möchte ich natürlich nicht Gefahr laufen, bei größeren Programmen, wie unserem Software-Projekt, dass im Herbst-Trimester kommen soll, zu viele Ressourcen sinnlos zu verschwenden.

Dass es ansich ein rekursiver Aufruf ist, ist mir klar. Immerhin rufe ich in der laufenden Methode selbige wieder auf. Mir geht es nur darum, ob dieses Java-Speicheraufräum-Tool (Namen vergessen) selbstständig erkennt "aha, unnötige instanz -> weg" oder nicht.

lg
Moch
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Eine Rekursion entsteht dann, wenn eine Prozeudur sich selbst wieder aufruft.

Wo befürchtest du denn, dass das passiert?
 
Zuletzt bearbeitet:

muckelzwerg

Bekanntes Mitglied
Na wenn er die main innerhalb der main-methode wieder aufruft. Das ist schon eine Rekursion. Es gibt Umgebungen, die mit sowas umgehen können unter bestimmten Bedingungen.
Lua kann das soweit ich weiß, wenn es der allerletzte Befehl eines Blocks ist. Was java da macht, kann ich nicht sagen, schätze aber dass es genau den erwarteten "Fehler" bringt.

Pack doch mal einen Zähler rein für die Instanzen, oder schau es im Debugger an, oder benutz den Profiler.

Grundsätzlich macht man da eher eine Schleife und springt an den Anfang der Funktion zurück, anstatt sie "nested" aufzurufen.
 

Moch

Bekanntes Mitglied
Danke für das Ändern des Fehlers. Sorry!

Ich meine den erneuten Aufruf der main in Zeile 10.

Es ist ja ein Aufruf der main, in der main selbst.
Also ruft doch die main sich selbst wieder auf oder täusche ich mich da?

Edit: Danke! Ich werde mir das mal anschauen, wie sich das verhält. Wie gesagt: Normalerweise bevorzuge ich Schleifen, aber irgendwie war es hier so bequemer ^^
 
Zuletzt bearbeitet:
S

SlaterB

Gast
das Base-Objekt jedes Aufrufs wird in diesem Fall tatsächlich theoretisch im Speicher gehalten,
ob Java von selber entsprechendes erkennt, kann ich nicht sagen,
helfen würde alpha=null; vor dem Rekursionsaufruf,

ansonsten gibt es noch die main-Methode an sich, bei jedem rekursiven Aufruf wird sich der Aufrufer gemerkt, der StackTrace von Exceptions wird sehr lang,
der Stack im Arbeitsspeicher gefüllt, bei Standardeinstellungen gibt es nach ein paar Tausend Runden eine StackOverflowException,
dagegen gibts auch keine Optimierung,

schlimm muss all das nicht sein, es gibt wohl kein Programm der Welt, wo jemand überhaupt 1000x 'ja' eintippt,
ob 10 Base-Objekte schon schlecht sind, musst du selber wissen


wann immer eine Schleife einfach möglich ist, solltest du aber wirklich in Betracht ziehen,
paar Code-Zeilen mehr sind doch kein Argument,
evtl. getrennt in main mit Schleife und Untermethode

Java:
public class Test {

    public static void main(String[] args)  {
        while (run());
    }

    private static boolean run() {
        // hier natürlich eher dein Programm, am Ende false zurückgeben wenn Abbruch
       
        System.out.println("run");
        return (Math.random() < 0.2);
    }
}
 
Zuletzt bearbeitet von einem Moderator:

Andi_CH

Top Contributor
Da täuschst dich nicht, aber warum fragst du denn, ob es eine Rekursion ist. Es ist eine!

Bei einer Rekursion stellen sich immer (mindestens!) zwei Fragen:
- Ist die Rekursion nötig oder ist das Problem anders zu lösen, wenn ja, im Zweifelssfall KEINE Rekursion machen.
----> Es ist anders zu lösen (wurde ja schon diskutiert)

- Wie bricht die Rekursion ab
----> Benutzereingabe und sonst nicht -> gefährlich.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Nutzereingabe splitten und in string array wieder ausgeben. Java Basics - Anfänger-Themen 1
M Programm per Nutzereingabe ändern Java Basics - Anfänger-Themen 3
F Nutzereingabe Zahl Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
M Variablen Rekursion mit 2 Parameteren Java Basics - Anfänger-Themen 4
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
M Lösungsweg Rekursion Java Basics - Anfänger-Themen 1
C StackOverflow bei Rekursion Java Basics - Anfänger-Themen 7
D Rekursion - Ich raffs nicht Java Basics - Anfänger-Themen 16
N Methoden Rekursion mit Kreisen Java Basics - Anfänger-Themen 7
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
J Rekursion Java Basics - Anfänger-Themen 22
T Rekursion Programmierverständnis Java Basics - Anfänger-Themen 12
K Rekursion: Rechenmauer mit Array erstellen Java Basics - Anfänger-Themen 17
K Rekursion einer Zahlenfolge (Ab- und Aufzählung) Java Basics - Anfänger-Themen 6
Zeppi Rekursion Java Basics - Anfänger-Themen 15
V Backtracking und Rekursion Java Basics - Anfänger-Themen 15
L REKURSION Java Basics - Anfänger-Themen 13
Kirby.exe Rekursion Java Basics - Anfänger-Themen 7
N for Schleife durch Rekursion ersetzen Java Basics - Anfänger-Themen 6
X Rekursion Java Basics - Anfänger-Themen 3
H Rekursion Java Basics - Anfänger-Themen 2
D Erste Schritte Rekursion Java Basics - Anfänger-Themen 13
M Rekursion Tage Ansteckung gesamte Bevölkerung Java Basics - Anfänger-Themen 15
M Java Rekursion Java Basics - Anfänger-Themen 9
G Java Rekursion Java Basics - Anfänger-Themen 5
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
N Rekursion Java Basics - Anfänger-Themen 18
M Verständnisproblem der Rekursion bei Arrays Java Basics - Anfänger-Themen 8
X Rekursion Rätsel Java Basics - Anfänger-Themen 4
N Klassen Rekursion mit Feldern von Objekten Java Basics - Anfänger-Themen 14
W Rekursion Java Basics - Anfänger-Themen 0
D Konsolenausgabe Zahlenfolge Rekursion Java Basics - Anfänger-Themen 3
J Ping Pong Methode mit Rekursion Java Basics - Anfänger-Themen 1
N Rekursion Java Basics - Anfänger-Themen 1
B Rekursion Basic Java Basics - Anfänger-Themen 15
O Rekursion Mergesort Java Basics - Anfänger-Themen 18
G Rekursion Java Basics - Anfänger-Themen 20
M Rekursion Java Basics - Anfänger-Themen 7
F Hilfe bei Rekursion... Java Basics - Anfänger-Themen 4
A Mit Rekursion Zufallszahlen erstellen und größte finden Java Basics - Anfänger-Themen 5
B Rekursion Wurzel Java Basics - Anfänger-Themen 39
O Rekursion ordentlich aufschreiben Java Basics - Anfänger-Themen 2
B Rekursion verstehen Java Basics - Anfänger-Themen 4
O Rekursion Java Basics - Anfänger-Themen 2
E Rekursion verstehen. Java Basics - Anfänger-Themen 4
E Rekursion Kisten befüllen Java Basics - Anfänger-Themen 10
E Rekursion verstehen Java Basics - Anfänger-Themen 2
O Rekursion, String Java Basics - Anfänger-Themen 8
N Invertierte Rekursion??? Java Basics - Anfänger-Themen 5
M Bitte um Hilfe bei Quellcode (Rekursion) Java Basics - Anfänger-Themen 6
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
L Rekursion im Baum Java Basics - Anfänger-Themen 9
E Pfade eines Baums angeben ohne Rekursion Java Basics - Anfänger-Themen 20
L Rekursion Baumknoten Java Basics - Anfänger-Themen 8
L Rekursion größtes Zeichen Java Basics - Anfänger-Themen 8
L Rekursion Modulo Java Basics - Anfänger-Themen 7
I Rekursion Java Basics - Anfänger-Themen 11
H Rekursion Java Basics - Anfänger-Themen 7
N Methoden zur Rekursion (catalansche Zahlen) Java Basics - Anfänger-Themen 4
S Frage zu Rekursion... Java Basics - Anfänger-Themen 15
N Java catalansche Zahlen (Rekursion) Java Basics - Anfänger-Themen 5
S Noch eine Frage zur Rekursion... Java Basics - Anfänger-Themen 11
S Frage zu einer Rekursion Java Basics - Anfänger-Themen 15
F Methoden Abbruchbedingung bei Rekursion Java Basics - Anfänger-Themen 2
Z Rekursion Primzahlen Java Basics - Anfänger-Themen 1
K Rekursion Verständnisfrage Java Basics - Anfänger-Themen 19
L Methoden Rekursion gibt alten Wert wieder Java Basics - Anfänger-Themen 37
M Rekursion Minimums Suche Java Basics - Anfänger-Themen 12
J Rekursion Java Basics - Anfänger-Themen 5
F Aufgabe Rekursion Binärer Baum Java Basics - Anfänger-Themen 15
N Rekursion Java Basics - Anfänger-Themen 2
B Rekursion - Übung Java Basics - Anfänger-Themen 2
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
P Rekursion Java Basics - Anfänger-Themen 19
G Rekursion Beispiel Java Basics - Anfänger-Themen 3
M Rekursion schreiben Java Basics - Anfänger-Themen 16
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
T Array Rekursion Java Basics - Anfänger-Themen 1
B lineare und schlichte Rekursion Java Basics - Anfänger-Themen 1
A Rekursion Java Basics - Anfänger-Themen 2
B Rekursion Java Basics - Anfänger-Themen 3
A Rekursion stoppt an der falschen Stelle Java Basics - Anfänger-Themen 4
A Lineare Rekursion Java Basics - Anfänger-Themen 6
P Hilfe zur Rekursion? Java Basics - Anfänger-Themen 2
B Rekursion Schneeflocke - Kurze Frage zur Methode Java Basics - Anfänger-Themen 11
L Rekursion Java Basics - Anfänger-Themen 4
S Rekursion Rückgabe - Türme von Hanoi Java Basics - Anfänger-Themen 16
kilopack15 Rekursion und Schleifen Java Basics - Anfänger-Themen 27
E Rekursion Java Basics - Anfänger-Themen 10
G rekursion nicht verstanden Java Basics - Anfänger-Themen 5
K Rekursion-Verständnisfrage Java Basics - Anfänger-Themen 4
E Methoden String wird in Rekursion nicht überschrieben Java Basics - Anfänger-Themen 2
T 2fach Rekursion. Java Basics - Anfänger-Themen 4
N Rekursion mit if-Anweisung Java Basics - Anfänger-Themen 10
K Methoden Zahlensysteme umwandeln mittels Rekursion Java Basics - Anfänger-Themen 5
H Rekursion Binäre Suche Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben