Nach return() der aufgerufenen Methode wird aufrufende Methode nicht weiter ausgeführt

Rufus.Mueller

Bekanntes Mitglied
Ich habe in meiner main-Methode eine Verschachtelung von if-Anweisungen stehen. Diese rufen die Methode stufeDurchfuhren() aus. Die ersten beiden if-Anweisungen (Stufe 2 und Stufe 3) werden offenbar ausgeführt, stufeDurchfuehren gibt nämlich eine Reihe von Bildschirmausgaben aus, anhand derer ich das sehen kann. Danach werden aber keine weiteren if-Anweisungen ausgeführt, was ich mir nicht erklären kann. Hab extra mal diverse Konsolenausgaben eingefügt um dem Fehler auf die Schliche zu kommen. Da weder "Da bin ich doch" noch "Bin ja gar nicht true" ausgegeben werden, vermute ich, dass die if-Anweisung als ganzes nicht, also weder der else- noch der then-Zweig ausgeführt werden. Fehlermeldung gibt die Konsole keine aus.

Java:
if (stufe2.stufeDurchfuehren()==true){
			if (stufe3.stufeDurchfuehren()==true){
				System.out.println("Da bin ich doch!");
				if (stufe4.stufeDurchfuehren()==true){
					if (stufe5.stufeDurchfuehren()==true){
						if (stufe6.stufeDurchfuehren()==true){
							if (stufe7.stufeDurchfuehren()==true){
								if (stufe8.stufeDurchfuehren()==true){
									if (stufe9.stufeDurchfuehren()==true){
										
									}else {System.out.println("Ist ja gar nicht true!");}
								}else {System.out.println("Ist ja gar nicht true!");}
							}else {System.out.println("Ist ja gar nicht true!");}
						}else {System.out.println("Ist ja gar nicht true!");}
					}else {System.out.println("Ist ja gar nicht true!");}
				}else {System.out.println("Ist ja gar nicht true!");}
			}else {System.out.println("Ist ja gar nicht true!");}
		}else {System.out.println("Ist ja gar nicht true!"); 
		}
	}



Java:
/Durchführung der Corsi-Aufgabe
	public boolean  stufeDurchfuehren() throws InterruptedException, IOException{
		Sequenzbehaelter=this.sequenzeinleser.leseSequenzen();
		aktuelleSequenz=Sequenzbehaelter.get(posAktuelleSequenz);
		
		posAktuelleSequenz++;
		eingabeSequenzVP = this.window.corsiPlatte.sequenzAnzeigen(aktuelleSequenz, this.window);
		while (this.window.corsiPlatte.eingabeBeendet==false) {		
			g++;
			g--;
		}
		
	
	
		
		this.vergleiche();
		versucheDieseStufe = versucheDieseStufe++;
		
		return bestanden;

			
		
	}

		//Methode die testet, ob die Eingabe der VP richtig war
	public  boolean  vergleiche(){
		int h=0;
		while (eingabeSequenzVP.sequenzfolge[h] != 0){
			if (eingabeSequenzVP.sequenzfolge[h] != aktuelleSequenz.sequenzfolge[h]) {
		//		System.out.println("figge?");
				sequenzenGleich=false;
			}
		h++;
		}
		
		if (sequenzenGleich == false) {
			window.corsiPlatte.rueckmeldung.setText("Falsch!");
			bestanden=false;}
		
		else 
			{window.corsiPlatte.rueckmeldung.setText("Richtig!");
			bestanden=true;}
		
		window.corsiPlatte.rueckmeldung.setVisible(true);
		return bestanden;  //Das ist evtl. noch zu ändern 
	}
 
G

gman

Gast
Hi,

ändere mal:

[JAVA=16]this.vergleiche();[/code]

in:

[JAVA=16]
bestanden = this.vergleiche();
[/code]

um. Denn in deiner "stufeDurchführen"-Methode wird diese Variable nicht gesetzt.
Wenn es daran nicht liegt, füge mal mehr Log-Meldungen ein oder nutze einen
Debugger und setzte Breakpoints.
 

Guardi

Bekanntes Mitglied
Dein wunderschönes if-else Konstrukt ist aber auch wirklich ganz ganz furchtbar böse.
Von Schleifen hast du schonmal was gehört? ;)
 

Rufus.Mueller

Bekanntes Mitglied
ändere mal:

[JAVA=16]this.vergleiche();[/code]

in:

[JAVA=16]
bestanden = this.vergleiche();
[/code]um.



Wär zu schön um wahr zu sein gewesen, ändert leider nichts.


Denn in deiner "stufeDurchführen"-Methode wird diese Variable nicht gesetzt.
Wenn es daran nicht liegt, füge mal mehr Log-Meldungen ein oder nutze einen
Debugger und setzte Breakpoints.

Was für log-Meldungen meinst Du? Die Konsole gibt keine Fehler aus. Habe mal einen breakpoint in die ersten drei if-Zeilen gesetzt (stufe 2 bis 4). Wie vermutet wird die die dritte if-Anweisung (Stufe 4) nicht ausgeführt. Was ich ziemlich auffällig finde: Nach Stufe eins wird ja ordnungsgemäß Stufe drei aufgerufen obwohl immer der gleiche Code verwendet und die gleichen Methoden aufgerufen werden Stufe vier dann nicht mehr. Es kann sich doch zwischen den beiden Aufrufen gar nichts geändert haben?


Dein wunderschönes if-else Konstrukt ist aber auch wirklich ganz ganz furchtbar böse.
Von Schleifen hast du schonmal was gehört?

Deiner feinen Ironie entnehme ich, dass ich bessereine Schleife hätte verwenden sollen. Ich glaube das mir Schleifen hier nicht weiter geholfen hätten. Zum einen hängt die Ausführung der nächsten Stufe davon ab ob bei der letzten Stufe true zurückgegeben wird. Zum anderen, ist das nur die Anfangsversion des Codes. Wenn er funktioniert muss ich ihn noch erweitern, es gibt dann auch Sprünge zwischen den Stufen. Etwa so: Stufe zwei ist true also weiter zu drei. Drei ist false, also wird drei noch mal probiert. Aber max zwei Versuche. Zudem: Eine Stufe soll insgesamt nur zwei Chancen haben drei mal hintereinander true zu werden. Ich glaub' da reichen mir Schleifen nicht.
 

Plastagen

Mitglied
Vielleicht hängt er bei der Stufe auch in der SChleife fest:

Java:
while (this.window.corsiPlatte.eingabeBeendet==false) {     
            g++;
            g--;
        }
 

Guardi

Bekanntes Mitglied
Deiner feinen Ironie entnehme ich, dass ich bessereine Schleife hätte verwenden sollen. Ich glaube das mir Schleifen hier nicht weiter geholfen hätten. Zum einen hängt die Ausführung der nächsten Stufe davon ab ob bei der letzten Stufe true zurückgegeben wird. Zum anderen, ist das nur die Anfangsversion des Codes. Wenn er funktioniert muss ich ihn noch erweitern, es gibt dann auch Sprünge zwischen den Stufen. Etwa so: Stufe zwei ist true also weiter zu drei. Drei ist false, also wird drei noch mal probiert. Aber max zwei Versuche. Zudem: Eine Stufe soll insgesamt nur zwei Chancen haben drei mal hintereinander true zu werden. Ich glaub' da reichen mir Schleifen nicht.

Korrekt, "nur" eine Schleife bauen reicht nicht.
Aber du merkst ja gerade schon selber wie gut wartbar und änderbar dein Code ist, wie sich die Fehlersuche gestaltet etc.
Ich weiß nicht genau welche Aufgabe du erfüllen musst, aber ich bin mir zu 100% sicher dass es auch ohne diese if-else Konstrukte geht. Glaub mir, du wirst auf Dauer nicht glücklich damit.

Das was du angesprochen hast, die Fehlversuche etc lässt sich alles durch ein "geschicktes" Klassen-Design realisieren.
 
G

gman

Gast
Was ich ziemlich auffällig finde: Nach Stufe eins wird ja ordnungsgemäß Stufe drei aufgerufen obwohl immer der gleiche Code verwendet und die gleichen Methoden aufgerufen werden Stufe vier dann nicht mehr

Dann setzt mal einen Breakpoint so das er bei Stufe drei anhält und gehe schrittweise weiter bis du an der Stelle bist an
der er hängt oder abbricht. Läuft das Programm nach diesem Code-Abschnitt denn überhaupt richtig weiter?

PS: Guardi hat schon recht. Du merkst ja selber das die Fehlersuche in solchem Code nicht so
einfach ist.
 

Rufus.Mueller

Bekanntes Mitglied
Ihr habt wohl recht mit den Schleifen. Im Moment steh' ich aber unter einem gewissen Zeitdruck, so, dass ich größere Umstrukturierungen gerne aufschieben würde bis ich erstmal eine Beta-Version hab' die als Notbehelf schon einsetzbar ist.

Ich habe jetzt folgendes gemacht. Ich habe diese Codezeile

Java:
eingabeSequenzVP = this.window.corsiPlatte.sequenzAnzeigen(aktuelleSequenz, this.window);

aufgesplittet in

Java:
		corsiplatte = this.window.corsiPlatte;	
		       eingabeSequenzVP = corsiplatte.sequenzAnzeigen(aktuelleSequenz, this.window);

Von diesen beiden Zeilen wird die erste noch ausgeführt, die zweite nicht mehr. Fehlermeldung kommt aber nach wie vor keine. Mir ist das unerklärlich.
 

Rufus.Mueller

Bekanntes Mitglied
Ich habe durch Konsolenausgaben sichergestellt, dass es dass Argument aktuelleSequenz gibt und es sinnvolle Werte hat.

Zudem habe ich noch diese Variante ausprobiert:

Java:
        corsiplatte = this.window.corsiPlatte;  
               eingabeSequenzVP = corsiplatte.sequenzAnzeigen(aktuelleSequenz, window);

Ohne Erfolg.
 
Zuletzt bearbeitet:
G

gman

Gast
Geh mal mit "StepInto" in die Methode "corsiplatte.sequenzAnzeigen(aktuelleSequenz, this.window)" rein und
schaue wie weit es da geht.
 

Landei

Top Contributor
Kleiner Tipp: Wenn es später komplexer mit den "Stufen" (was auch immer das sein mag) wird, ist eine Lösungsmöglichkeit ein (Determinierter) Endlicher Automat: Du hast für jeden "Zustand" ein entsprechendes Objekt, das auch die Logik beinhaltet, wie es weitergeht, d.h. welcher Folgezustand auf eine bestimmte Zustandsänderung (z.B. stufeDurchführen erfolgreich oder nicht) folgen muss.
 

Rufus.Mueller

Bekanntes Mitglied
Bin mir nicht sicher ob ich den Debugger verwende. Habe einen Breakpoint in der problematischen Zeile gesetzt, dann bin ich in den Debugger und habe das Programm im debugging-Modus gestartet. (Also über den Insekten-Button). Hat dann auch schön am Breakpoint gehalten und ich bin mit Stepinto weiter. Hat dann wie erwartet die Methode sequenzAnzeigen() gestartet, ABER irgendwann komme ich dann in die Endlosschleife (wurde vorhin schon mal gepostet) die sicherstellt, dass es erst weitergeht wenn ein Button gedrückt wurde. Von da an komm' ich dann nicht weiter, d.h. ich komm erst gar nicht zu Stufe 3 auf diese Art und Weise.
 

Rufus.Mueller

Bekanntes Mitglied
Kleiner Tipp: Wenn es später komplexer mit den "Stufen" (was auch immer das sein mag) wird, ist eine Lösungsmöglichkeit ein (Determinierter) Endlicher Automat: Du hast für jeden "Zustand" ein entsprechendes Objekt, das auch die Logik beinhaltet, wie es weitergeht, d.h. welcher Folgezustand auf eine bestimmte Zustandsänderung (z.B. stufeDurchführen erfolgreich oder nicht) folgen muss.

Bin mir nicht sicher, ich glaube sowas ähnliches habe ich auch geplant. Mit den Stufen hat es Folgendes auf sich: Auf dem Bildschirm gibt es durcheinander angeordnet 9 Quadrate. In Stufe 2 leuchten zwei Quadrate auf und der Teilnehmer muss diese wieder in der richtigen Reihenfolge anklicken. In der dritten Stufe sind es drei Quadrate usw. Die Stufen erhöhen sich solange bis er eine nicht schafft, die darf dann einmal wiederholt werden. Es soll ein endgültiger Meswert erhoben werden wieviele Quadrate sich jmd. zuverlässig merken kann. Dadruch wird es komplizierter, weil man einen Kreis u.ä. mehrmals ansteuern muss, gleichzeitig muss es aber eine Abbruchbedingung geben. Welche Kriterien ich da genau anlege, weiß ich noch nicht.Wenn sich also jemand manchmal 7, meistens aber nur 6 merken kann soll 6 als Ergebnis rauskommen. Ich hab mir die Stufen als 9 Kreise aufgemalt die mit Pfeilen verbunden sind, ich glaube das kommt dem endlichen Automaten recht nahe. Jeder Kreis entspricht einer Instanz der Klasse Stufe. Dies muss ich dann irgendwie noch mit Variablen versehen die die Zustände steuern (wie oft wurde eine Stufe schon probiert, wie oft geschafft, wie oft nicht). Details muss ich mir wie gesagt noch überlegen bzw. ausprobieren, wenn ich dieses vermaledeite Problem hier in den Griff kriegen sollte.
 

Rufus.Mueller

Bekanntes Mitglied
Gut, jetzt weiß ich wie ich den Debugger einsetzen muss. Habe einen Breakpoint in die Zeile wo die zweite if-Anweisung beginnt gesetzt. Von dort aus kann ich dann fröhlich bis zur fraglichen Stelle schlendern. Seltsamerweise gehts von dort aus genau wie in der if-Anweisung von Stufe 2 ganz normal zur Methode sequenzAnzeigen(), diese wird dann Zeile für Zeile durchgerödelt.

Das gibts doch nicht!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Q Tastatureingabe direkt nach Eingabe (ohne zwischenzeitliches "Return" o.Ä ) weiterverwenden Java Basics - Anfänger-Themen 1
M Variablen Werte nach setzen, bei Abfrage wieder alter Wert Java Basics - Anfänger-Themen 11
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
ptcho Werte/Position nach dem Funktionsaufruf tauschen? Java Basics - Anfänger-Themen 1
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
D Programmieren nach UML Java Basics - Anfänger-Themen 2
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
K log4j nach log4j2 überführen Java Basics - Anfänger-Themen 0
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
L Zahlungen nach Monat filtern Java Basics - Anfänger-Themen 2
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
I String nach Wort suchen Java Basics - Anfänger-Themen 6
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
O 2D-Array nach einer Spalte sortieren Java Basics - Anfänger-Themen 22
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
C Meldung einer Klasse nach "oben" Java Basics - Anfänger-Themen 6
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
C Lotto 3, 4, 5, 6 Richtige nach x Ziehungen ermittelt.. Java Basics - Anfänger-Themen 7
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
R JDK installieren Durcheinander nach installation von SE 14.02 Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
B DateTimeFormatter nach LocalDateTime, wenn dd.MM.yyyy oder dd.MM.yyyy mm:hh Java Basics - Anfänger-Themen 5
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
S Wohin kommt das „abstract“? Vor oder nach „public“/ „private“ /... Java Basics - Anfänger-Themen 3
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
N Operatoren Schreibtischtest der Reihen-Suche nach Aufschluss in die Basics Java Basics - Anfänger-Themen 1
B Umstieg von C# nach Java Java Basics - Anfänger-Themen 18
Ellachen55 Wie nach häufigste Werte im Array suchen? Java Basics - Anfänger-Themen 2
M Untersuchen ob ein Graph nach entfernen einer Kante immer noch zusammenhängend ist Java Basics - Anfänger-Themen 70
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
B String nach erstem Leerzeichen trennen Java Basics - Anfänger-Themen 7
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
F Input/Output Files von A nach B kopieren Java Basics - Anfänger-Themen 11
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
R Benutzereingaben als Array abspeichern nach Programmstart Java Basics - Anfänger-Themen 5
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
L Arrayliste von hinten nach vorne ausgeben Java Basics - Anfänger-Themen 10
F Array nach Objektattribut durchsuchen Java Basics - Anfänger-Themen 6
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
O String von vorne nach hinten an einem Zeichen Java Basics - Anfänger-Themen 10
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
S suche nach varible POSITION ... fuer das pixel-maennchen Java Basics - Anfänger-Themen 4
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
B String nach HTML formatieren Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben