Aufgabenblatt 6 - Nr 6.2


Ich denke schon, das sowas auch aussortiert werden soll - gehört ja schließlich nicht zur Sprache…


@Marko:

ABER:
Erst musst du überprüfen, ob es ein Term ist (isTerm()), dann ob ein Pluszeichen kommt und falls ein Pluszeichen kommt, eins weiter und nochmals isExpression()


Außerdem musst du an den Fall denken, dass es kein Plus-Zeichen du aber am Ende des Strings bist. d.h. da musst du dann true zurückgeben.


Hi, ich habe mit meiner Code gestern 3 Stunden und heute schon 2 Stunden gespielt und verstehe nicht, wo der Fehler liegt…

private boolean isExpression() {
if (!isTerm()){ // production “E → T”
return false;
}
else{
if (nextChar()!=‘+’){ // production “E → E+T”
return false;
}
else{
proceed();
if (isExpression()){
return true;
}
else {
return false;
}
}
}
}
Kann vielleicht mir jemand helfen?


Da ich weng im Zeitdruck bin, schick ich dir nur kurz wie ichs geamcht, hab, dann kannst dus vergleichen. Kann dir allerdings keine Garantie geben, dass es 100% stimmt.

	private boolean isExpression() {
	
		if (isTerm()) {
			if(nextChar() == '+') {
				proceed();
				return isExpression();		
            // } else if(nextChar() != 0) {	       // eigentlich überflüssig
			//	return false;.
			} else {,
				return true;			
			}				
		} else {
			return false;
		}
	}
	
	

Vielen Dank! Bei mir stimmt es genau so! Ich habe meine Code weggelöscht und dann langsam wieder geschrieben…und o Wunder, es funktioniert und zwar richtig :slight_smile:


Kannst du ihn später nochmal posten, dann werf ich später nochmal nen blick drüber


Ich habe 100% gekriegt :slight_smile:


Gut, dann sollte meins auch passen. Thx.


Wenn man nichts dagegen hat, lösche ich diese Teilaufgebe von oben, damit man sich noch a bissl selbst überlegen kann


Bei mir gibts auch 100% und es funzt auch alles. Nur komm ich einfach nicht drauf, warum Sachen wie 3+3+ bei mir auch als not valid ausgegeben werden, obwohl ich das else zum abfangen weglasse.(rot markiert)

private boolean isExpression() {
	if (isTerm()){
		if (nextChar()=='+'){
			proceed();
			if(isTerm())isExpression();
                                                         //   else return false;
		}
		return true;
	}
	else return false;
	
}

kann mir jemand weiterhelfen, wo dieser fall abgefangen wird?


Schau dir den “Sentinel” genauer an, und vor allem, wann der auf dem angehängten 0 steht und wann nicht…

…und warum filtert mir dieses Forum ein \ 0 raus? grr


Ahh…ok…manchmal ist man echt blind.

nextChar() == 0 fängts ab.

thx


Soll 3+3+ erzeugbar sein?


Imo nein.
Wuerde ja E → T | E + T widersprechen, da T nicht leer sein kann.


Sowas soll abgefangen werden. Ich hatte es bei mir schon abgefangen, und wunderte mich nur warum solche Fälle immer noch abgefangen werden, obwohl ich die entsprechende Zeile rausgenommen hatte.

Im Endeffekt brauchen wir garnichts einbaun, um irgendwelche falscheingaben abzufangen. Ist alles schon implementiert.:slight_smile: