Praktische Übung 01 - Task 2 - Step 4

Tai
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 6. Feb 2012 23:36

Praktische Übung 01 - Task 2 - Step 4

Beitrag von Tai » 18. Apr 2012 17:46

Hallo,

ich habe ein 'Verständnissproblem' mit der Aufgabe.
Ich frage mich gerade ob die Liste ab den "begin" eine einfache Expression ist oder ob die ganze Liste eine ist.

Wenn jetzt die Liste keine einfach Expression wäre, dann hätte ich das Problem:

Ich gehe ja mal davon aus um *, /, + , - zu finden, sollen wir die implementierten Methoden findMul...,findAdd... benutzen.
Jetzt bekommen wir begin : MathElement übergeben, der den Anfang darstellen soll.
Ich gehe jetzt mal davon aus das wir erst alles berechnen/bearbeiten sollen ab den Element begin.

Nehmen wir jetzt mal ein Beispiel:
Wir haben die Liste: ( -> 1 -> + -> ( -> 2 -> + -> 3 -> ) -> ).
So, unser begin Element ist jetzt die 2. '('. Würden wir jetzt findAddOrSubOperation() ausführen, würden wir das erste Plus bekommen.
//Mir ist klar das es mit + sich nichts am Ergebniss ändern würde, geht ja auch mit - oder / //



Wenn jetzt die Liste eine einfach Expression wäre, dann frag ich mich, was das "begin" Element für ein Sinn hat.
Beispiel wieder:
1 -> + -> 2 -> NULL
begin wäre ja jetzt hier die '1', wenn ich jetzt aber die Rechnung ausführe, dann können wir ja begin.setData(3) setzen.
Somit wäre das Ergebniss dann 3 -> NULL.
Also kann ich ja gleich MathListInstanz.first überschreiben.


Oder sollen wir die Elemente von begin bis 'NULL' bzw. ')' alle in eine neue MathList packen und einfach das Ergebniss in die Liste schreiben?


Danke für die Hilfe:)

Benutzeravatar
JannikV
Nerd
Nerd
Beiträge: 609
Registriert: 24. Apr 2011 12:42

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von JannikV » 18. Apr 2012 20:07

Hi,

die ganze Liste ist nicht notwendigerweise eine SimpleExpression. Wenn sie Klammern enthält ist sie das nicht.

In deinem Beispiel wäre das begin Element übrigens nicht die 2 sondern die Klammer davor. (JavaDoc Kommentar lesen, begin ist nur eine Zahl wenn die ganze Liste keine Klammern mehr enthält.)

evaluateSimpleExpression bekommt also das begin Element übergeben, welches von findInnermostExpression zurückgegeben wurde.

Innerhalb evaluateSimpleExpression kann man dann die find Methoden benutzen um nach den Operationen zu suchen. Die bereits definierten find Funktionen sind dafür aber denkbar schlecht geeignet. Ich benutze sie gar nicht. Stattdessen habe ich sie mit einem Parameter begin überladen, ab dem gesucht wird und zwar nur bis zum ersten Auftreten von ')'.

Hoffe das hilft weiter.

VG
Jannik

Tai
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 6. Feb 2012 23:36

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von Tai » 18. Apr 2012 20:26

Hallo Jannik,
JannikV hat geschrieben: Innerhalb evaluateSimpleExpression kann man dann die find Methoden benutzen um nach den Operationen zu suchen. Die bereits definierten find Funktionen sind dafür aber denkbar schlecht geeignet. Ich benutze sie gar nicht. Stattdessen habe ich sie mit einem Parameter begin überladen, ab dem gesucht wird und zwar nur bis zum ersten Auftreten von ')'.
genau das ist bei mir der Punkt.
Wofür sollte man denn die such Methoden so implementieren wie sie 'gewollt' sind.
Naja danke für die Antwort, das hat meine Gedankengang unterstützt.

Tim

fabian.wagner
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 152
Registriert: 19. Okt 2010 12:51

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von fabian.wagner » 19. Apr 2012 11:35

Tai hat geschrieben:Hallo Jannik,
JannikV hat geschrieben: Innerhalb evaluateSimpleExpression kann man dann die find Methoden benutzen um nach den Operationen zu suchen. Die bereits definierten find Funktionen sind dafür aber denkbar schlecht geeignet. Ich benutze sie gar nicht. Stattdessen habe ich sie mit einem Parameter begin überladen, ab dem gesucht wird und zwar nur bis zum ersten Auftreten von ')'.
genau das ist bei mir der Punkt.
Wofür sollte man denn die such Methoden so implementieren wie sie 'gewollt' sind.
Naja danke für die Antwort, das hat meine Gedankengang unterstützt.

Tim
Die Methoden findMulOrDivOperation etc. sollen eine ganze MathList durchsuchen und den entsprechenden Pointer zurück geben. Schau dir mal die anderen Threads im Forum GDI2 Übung an. Vielleicht hilft dir da einiges. Habe da auch schon wertvolle Tipps gegeben. Es gibt eine sehr einfache Lösung für dieses Problem.
Das ist übrigens genau der Knackpunkt in dieser Aufgabe, deswegen will ich nicht zu viel verraten :)

Benutzeravatar
JannikV
Nerd
Nerd
Beiträge: 609
Registriert: 24. Apr 2011 12:42

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von JannikV » 19. Apr 2012 14:15

Ja du hast ja schon geschrieben dass sich das auch dadurch lösen lässt, dass man für den inneren Ausdruck eine neue Liste anlegt die dann mit den Methoden durchsucht werden kann.

Kann man machen. Kann man aber auch sein lassen und so machen wie ich es beschrieben habe. Außer du sagst jetzt, dass diese Art der Lösung verboten ist. Das wäre natürlich äußerst unschön.

Was sagst du?

VG

fabian.wagner
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 152
Registriert: 19. Okt 2010 12:51

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von fabian.wagner » 19. Apr 2012 14:45

JannikV hat geschrieben:Ja du hast ja schon geschrieben dass sich das auch dadurch lösen lässt, dass man für den inneren Ausdruck eine neue Liste anlegt die dann mit den Methoden durchsucht werden kann.

Kann man machen. Kann man aber auch sein lassen und so machen wie ich es beschrieben habe. Außer du sagst jetzt, dass diese Art der Lösung verboten ist. Das wäre natürlich äußerst unschön.

Was sagst du?

VG
Also wenn du so fragst natürlich... Nein, Spaß beiseite :)
Die Aufgabenstellung soll eine (möglichst einfache) Lösungsstrategie bieten. Deswegen haben wir auf eine Methode wie findMulOrDivOperationInSubSimpleExpression(IListElement) verzichtet. Ich hoffe du stimmst mir zu, dass ein solcher Methodenname eher unbrauchbar ist :!:
Die Lösungstrategie sollte, muss aber nicht eingehalten werden. Aufgabe ist es eine evaluate() Methode zu schreiben. Wenn diese ihre Arbeit tut und die Tests durchlaufen hast du die Aufgabe (wahrscheinlich) gut gelöst. Für die Testate musst du in der Lage sein, deine evaluate() Methode zu erklären und vor allem solltest du erklären können, warum du das anders gemacht hast, als in der Aufgabenstellung (Ich weiß, dass du das auf jeden Fall kannst, ich schreibe das nur für alle anderen GdI2 Hörer, die das lesen werden)

P.S. Am Anfang hatte ich eine ähnliche Lösungsstrategie wie du, fande dann aber diese Idee eine bessere Lösung :)

Benutzeravatar
JannikV
Nerd
Nerd
Beiträge: 609
Registriert: 24. Apr 2011 12:42

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von JannikV » 19. Apr 2012 14:51

Ok danke, damit sind alle Unklarheiten beseitigt.

(ich finds anders schöner, aber das tut ja nix zur Sache jetzt ;) )

VG

Tai
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 6. Feb 2012 23:36

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von Tai » 20. Apr 2012 16:43

Also ich selber habe Sie jetzt einfach überladen, es ist meiner Meinung nach logisch und funktioniert ohne Probleme.

Danke

Tim

christophbued
Mausschubser
Mausschubser
Beiträge: 54
Registriert: 12. Mär 2012 13:43

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von christophbued » 22. Apr 2012 18:16

Das englisch in der Aufgabensetllung und was ihr im forum geschrieben habt verwirrt mich gerade mal total.
was soll denn jetzt evaluateSimpleExpression genau machen???

also eine simple Expression ist entweder
beispiel
(->12-> +-> 12 ->)

12 -> +-> 12

keine simple Expression ist also
beispiel
(->12-> +->(-> 12 ->+-> 12))

soll die methode beispiel 1
so auswerten
24->null

Benutzeravatar
JannikV
Nerd
Nerd
Beiträge: 609
Registriert: 24. Apr 2011 12:42

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von JannikV » 22. Apr 2012 18:25

Ja, wobei du dir aussuchen kannst ob evaluateSimpleExpression die Klammern selbst wegmacht oder noch drumlässt. Wenn es sie nicht entfernt muss das von evaluate() erledigt werden.

$Chris$
Neuling
Neuling
Beiträge: 6
Registriert: 12. Apr 2012 15:57

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von $Chris$ » 22. Apr 2012 19:07

Hey,

bräucht mal dringend Hilfe mit diesem dummen IntegerCalculator.

Wenn ich den Test drüberlaufen lass, bricht der Test ständig bei den Zeilen mit den Exceptions ab...
z.B.:

Code: Alles auswählen

		if (!leftOperand.next().data().equals(Calculator.SIGN_SUB))
			throw new IllegalArgumentException("Wrong operator in sub operation.");
...und ich raffs einfach net warum...

Kann mir irgendjemand helfen, sonst muss ich mich demnächst ausm Fenster werfen :P.

Benutzeravatar
JannikV
Nerd
Nerd
Beiträge: 609
Registriert: 24. Apr 2011 12:42

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von JannikV » 22. Apr 2012 19:11

Anstatt dich aus dem Fenster zu werfen solltest du lieber mal den Debugger anwerfen.
Angeblich ist da halt kein Minus-Zeichen. Musst du mal gucken was denn da konkret übergeben wird.

VG

christophbued
Mausschubser
Mausschubser
Beiträge: 54
Registriert: 12. Mär 2012 13:43

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von christophbued » 24. Apr 2012 11:18

Hi nochmal eine frage
ist eine simple expression dieses hier auch noch

12 + 12 + 12

und wem oder was soll ich denn mein ergebnis übergeben bzw aus geben die
methode void...
versteh noch nicht ganz genau was die Methode genaun machen soll..

patrik_s.stud.tu
Mausschubser
Mausschubser
Beiträge: 69
Registriert: 12. Okt 2006 20:56

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von patrik_s.stud.tu » 24. Apr 2012 12:22

SimpleExpression liegen immer vor, wenn du keine weiteren Klammern in diesem Ausdruck findest, daher direkt auswerten kannst ohne Unterausdruecke zuerst auswerten zu muessen.

Die meisten Methoden geben ihre 'Ergebnisse' ueber den Zustand der Liste zurueck. De facto gibt keinen direkten Rueckgabewert, sondern es wird mit Seiteneffekten gearbeitet. Das bedeutet: Die Liste wird manipuliert und steht daher als 'Ergebnis' fuer spaeter zur Verfuegung.

fabian.wagner
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 152
Registriert: 19. Okt 2010 12:51

Re: Praktische Übung 01 - Task 2 - Step 4

Beitrag von fabian.wagner » 24. Apr 2012 12:42

christophbued hat geschrieben:Hi nochmal eine frage
ist eine simple expression dieses hier auch noch

12 + 12 + 12

und wem oder was soll ich denn mein ergebnis übergeben bzw aus geben die
methode void...
versteh noch nicht ganz genau was die Methode genaun machen soll..
Ja, das ist auch eine Simple Expression.
Simple expressions are expressions without parentheses.
Die Methode evaluateSimpleExpression(IListElement) wertet eine Subexpression (diese fängt beim übergebenen Parameter an und geht bis zur schließenden Klammer) aus. Dabei ist es nicht Aufgabe, zu überprüfen, ob sich jetzt wirklich an dieser Stelle eine Simple Expression befindet :!:

Antworten

Zurück zu „Archiv“