P1 Task 2, alles außer evaluate läuft durch

Dcjte
Neuling
Neuling
Beiträge: 4
Registriert: 22. Apr 2015 13:12

P1 Task 2, alles außer evaluate läuft durch

Beitrag von Dcjte »

Alle Tests laufen einwandfrei durch nur die evaluate-function wird durch einen Timeout aufgefangen. Wenn ich zum Testen diesen raus nehme endet die Funktion in einer Endlosschleife. Ich zweifle, dass es am Evaluate liegt, da das nur ein 3Zeiler ist. Ich habe die anderen Methoden auch mit einigen weitern Tests getestet und alles lief durch, was wiederum darauf hinweisen würde, dass doch Evaluate falsch ist. Deshalb poste ich mal die Methode. Irgendwelche Testinspirationen für die anderen Methoden die nicht durch die Standardtests abgedeckt wurden?

public void evaluate()
{
do{
evaluateSimpleExpression(findInnermostExpression());
}while(!(isAtom()));
}

hololol2
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 154
Registriert: 27. Apr 2015 14:13

Re: P1 Task 2, alles außer evaluate läuft durch

Beitrag von hololol2 »

Die evaluate() sieht sinnvoll aus. Also hast wohl einen Fehler in einer anderen Methode, der von den Tests nicht erkannt wird.
Bei einer Endlosschleife wäre ein Fehler in isAtom() möglich.
Allerdings halt ich es für wahrscheinlicher, dass "zu viele Listenelemente" da sind, das heißt bei einer Rechenoperation nicht alle abgearbeiteten entfernt werden (z.B.: 43+5 -> 48+5).

CryNickSystems
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 119
Registriert: 30. Apr 2015 18:27

Re: P1 Task 2, alles außer evaluate läuft durch

Beitrag von CryNickSystems »

Kleiner Tipp:
Schau dir mal die Elemente an, die nach jedem do-while-Durchlauf erzeugt werden (im Übrigen ist 'ne do-while-Schleife möglicherweise eine schlechte Idee) ;)
Deine evaluate()-Methode macht eine bestimmte Sache nicht, weshalb isAtom() immer false zurückliefert.

Murry
Neuling
Neuling
Beiträge: 6
Registriert: 29. Apr 2015 20:57

Re: P1 Task 2, alles außer evaluate läuft durch

Beitrag von Murry »

Habe das selbe Problem. Durch testen in meiner Main ist mir dann aufgefallen, dass ich Ausdrücke wie 3*(0-3) nicht richtig interpretiere.
Setze am besten mal die werte aus der Testbench in deine Main ein und schaue welcher String fehlschlägt.

sch3rvv1n
Erstie
Erstie
Beiträge: 17
Registriert: 22. Apr 2015 10:58

Re: P1 Task 2, alles außer evaluate läuft durch

Beitrag von sch3rvv1n »

Also im TestEvaluate() fehlt noch ml.assembleNumbers(), die nicht nach ml.buildList(String) aufgerufen wird. weil mir dieser Aufruf einfach gefehlt hatte.

Rapha167
Mausschubser
Mausschubser
Beiträge: 49
Registriert: 30. Apr 2015 19:00

Re: P1 Task 2, alles außer evaluate läuft durch

Beitrag von Rapha167 »

kannst du mir sagen woran es lag? habe das selbe problem

hololol2
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 154
Registriert: 27. Apr 2015 14:13

Re: P1 Task 2, alles außer evaluate läuft durch

Beitrag von hololol2 »

Du musst assembleNumbers() einfach in deiner evaluate()-Funktion aufrufen

sch3rvv1n
Erstie
Erstie
Beiträge: 17
Registriert: 22. Apr 2015 10:58

Re: P1 Task 2, alles außer evaluate läuft durch

Beitrag von sch3rvv1n »

Deine testEvaluate() Methode soll so aussehen:


public void testEvaluate()
{
String[] testCases = {
"3+5*6-5/10*100+2",
"3.5+5.1/17-4.7+4-2354*7/7.0-1/10",
"(33+43)*434-45/10+((10-52)*(6-100)*(0-1)+(5*(5*(5*(((5)))))))",
"42.0*24+(12686/6343*123.232-23+(43*4.0-(0-3)-(3/12.0*(6.9))))",
"8923747823478892340892304+47823748927394789*2347283479233434343434344/253728457832423423424-12312312312313123123123",
"(8923747823478892340892304+47823748927394789*2347283479233434343434344/2347283479233434343434344-12312312312313123123123)*2.3"
};

Calculator[] calculators = {
ic,
pnc,
ic,
pnc,
ic,
pnc
};

String[] results = {
"35",
"-2351.0",
"29657",
"1404.739",
"8911877936492974499711696",
"20496301785677754733877131.0"
};

for(int i=0;i<testCases.length;i++)
{
String tcn = "Testcase "+(i+1)+": ";

ml = new MathList(calculators);
ml.buildList(testCases);

//hier assembleNumbers so hinzufügen
ml.assembleNumbers();

ml.evaluate();
System.out.println(ml.size());
System.out.println(ml.first().data());
assertEquals(tcn+"Evaluation did not finish", 1, ml.size());
assertEquals(tcn+"Wrong result", results, ml.first().data());
}
}

hololol2
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 154
Registriert: 27. Apr 2015 14:13

Re: P1 Task 2, alles außer evaluate läuft durch

Beitrag von hololol2 »

Auf keinen Fall die test-Methoden verändern! Du gibst diese NICHT mit ab.
Wenn dein Code nur durch eine Veränderung der test-Methoden läuft, wirst du das Testat nicht bestehen, da dort nicht "deine" test-Methoden verwendet werden.
Dein Code muss mit den gegebenen test-Methoden laufen, d.h. die .assembleNumbers() wird nicht im Test aufgerufen, das muss in deiner evaluate() passieren!

sch3rvv1n
Erstie
Erstie
Beiträge: 17
Registriert: 22. Apr 2015 10:58

Re: P1 Task 2, alles außer evaluate läuft durch

Beitrag von sch3rvv1n »

ok, alles klar, dankeschön

Antworten

Zurück zu „Archiv“