Praktische Übung 01 - Task 2 - Step 4
Praktische Übung 01 - Task 2 - Step 4
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:)
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:)
Re: Praktische Übung 01 - Task 2 - Step 4
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
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
Re: Praktische Übung 01 - Task 2 - Step 4
Hallo Jannik,
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
genau das ist bei mir der Punkt.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 ')'.
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
-
- Endlosschleifenbastler
- Beiträge: 152
- Registriert: 19. Okt 2010 12:51
Re: Praktische Übung 01 - Task 2 - Step 4
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.Tai hat geschrieben:Hallo Jannik,
genau das ist bei mir der Punkt.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 ')'.
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
Das ist übrigens genau der Knackpunkt in dieser Aufgabe, deswegen will ich nicht zu viel verraten

Re: Praktische Übung 01 - Task 2 - Step 4
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
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
-
- Endlosschleifenbastler
- Beiträge: 152
- Registriert: 19. Okt 2010 12:51
Re: Praktische Übung 01 - Task 2 - Step 4
Also wenn du so fragst natürlich... Nein, Spaß beiseiteJannikV 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

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

Re: Praktische Übung 01 - Task 2 - Step 4
Ok danke, damit sind alle Unklarheiten beseitigt.
(ich finds anders schöner, aber das tut ja nix zur Sache jetzt
)
VG
(ich finds anders schöner, aber das tut ja nix zur Sache jetzt

VG
Re: Praktische Übung 01 - Task 2 - Step 4
Also ich selber habe Sie jetzt einfach überladen, es ist meiner Meinung nach logisch und funktioniert ohne Probleme.
Danke
Tim
Danke
Tim
-
- Mausschubser
- Beiträge: 54
- Registriert: 12. Mär 2012 13:43
Re: Praktische Übung 01 - Task 2 - Step 4
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
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
Re: Praktische Übung 01 - Task 2 - Step 4
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.
Re: Praktische Übung 01 - Task 2 - Step 4
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.:
...und ich raffs einfach net warum...
Kann mir irgendjemand helfen, sonst muss ich mich demnächst ausm Fenster werfen
.
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.");
Kann mir irgendjemand helfen, sonst muss ich mich demnächst ausm Fenster werfen

Re: Praktische Übung 01 - Task 2 - Step 4
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
Angeblich ist da halt kein Minus-Zeichen. Musst du mal gucken was denn da konkret übergeben wird.
VG
-
- Mausschubser
- Beiträge: 54
- Registriert: 12. Mär 2012 13:43
Re: Praktische Übung 01 - Task 2 - Step 4
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..
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..
-
- Mausschubser
- Beiträge: 69
- Registriert: 12. Okt 2006 20:56
Re: Praktische Übung 01 - Task 2 - Step 4
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.
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.
-
- Endlosschleifenbastler
- Beiträge: 152
- Registriert: 19. Okt 2010 12:51
Re: Praktische Übung 01 - Task 2 - Step 4
Ja, das ist auch eine Simple Expression.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..
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 befindetSimple expressions are expressions without parentheses.
