While-Schleife Endet zu früh
-
was ist eigentlich dein Problem? wäre ich Profi müsste ich hier nicht nach Hilfe fragen wenn du was dazu beitragen willst dann tu es Vernünftig.
-
-
Gobbles schrieb:
Ich finde das hat weniger was mit einem hohen Ross als eher damit zu tun "wie man in den wald hineinruft so schallt es heraus" aber gut *absitz*
So kann man es auch bezeichnen. Aber das kann man auch auf dich beziehen. Und so eskaliert es sich dann bekanntermasen gegenseitig nach oben.
Gobbles schrieb:
was ist eigentlich dein Problem? wäre ich Profi müsste ich hier nicht nach Hilfe fragen wenn du was dazu beitragen willst dann tu es Vernünftig.
Bezüglich der Zeitmessung:
Die Auflösung ist viel zu ungenau. Du hast einen Unterschied, welcher unterhalb der Auflösung ist. Grundsätzlich musst du hier zwei Intervalle miteinander vergleichen: 0.139 - 0.159 und 0.137 - 0.157. Der Wert kann jeweils irgendwo in diesem Intervall liegen. Korrekt wäre also zum Beispiel 0.139 und 0.157 oder 0.159 und 0.137, etc. Es kann somit keine Aussage darüber gemacht werden, was tatsächlich schneller ist. Zudem hast du auch viel zu wenig Messungen durchgeführt und das auch noch mit den falschen Mitteln.Performanceüberlegungen, erst recht in diesem Minibereich, sollte man am besten sein lassen, wenn man nicht ganz genau weiss, was man tut. Optimierungen auf dieser Ebene haben in C# keinen Sinn. Wenn du optimieren willst bezüglich der Geschwindigkeit, dann wäre es vielleicht eher interessant, die MathLogic Klasse an sich zu optimieren. Nämlich wie sie überhaupt funktioniert und ob die Lösung effizient ist. Aber dazu benötigt man meistens entsprechende Tools, wie z.B. dotTrace von JetBrains. Nur sehr grobe Optimierungen machen überhaupt Sinn, ohne entsprechende Tools oder mit der Stopwatch Klasse zu tätigen. Sonst misst du allenfalls auch Seiteneffekte mit, Live-Optimierungen der CPU oder der Runtime, etc. etc.
Richtige Performancemessung ist ein recht komplexes und umfangreiches Thema. Als Anfänger verbrennt man sich hier nur die Finger.
Bezüglich dem "ohne Worte" von Swordfish:
KönnenoffeneKlammern
odergeschlosseneKlammern
überhaupt jemals kleiner wie 0 sein? Benötigt es die innere If-Abfrage überhaupt?Da ich gerade nicht viel Zeit habe und mir den Code nicht genauer angeschaut habe, nur eine positive Anmerkung:
Du hast die Funktionen kommentiert! Das ist sehr toll zu sehen. Wenn du hier nun noch entweder die C# XML Comments nehmen würdes oder z.B. die Syntax von Doxygen, dann wäre das noch ein grösseres Plus. Denn daraus lassen sich automatisch Dokumentationen zum Code generieren.
-
Dravere schrieb:
Bezüglich dem "ohne Worte" von hustbaer:
Det war nischt isch.
-
hustbaer schrieb:
Dravere schrieb:
Bezüglich dem "ohne Worte" von hustbaer:
Det war nischt isch.
Korrigiert, sry. Irgendwie etwas geschielt
-
Sie können nicht kleiner als null sein aber Null.
Um es zu kompletieren hier werden alle '(' und ')' in dem Term gezählt sind sie ungleich liegt ein fehler vor (return -1).
Sind die Variablen gleich und größer null exestieren Klammern die ich zuerst berechnen muss folglich (return Klammern).
sind die Variablen gleich aber 0 gibt es keine Klammern (return 0).Darüber hinaus muss ich sagen das ich das gesammte in den letzten 3Tagen geschrieben habe und ich einfach mal Blind drauf los geschreiben hab, dass einzige was man ändern könnte ist ...
// ... if (offeneKlammern == geschlosseneKlammern) { if (offeneKlammern > 0) // da beide Variablen ja schon auf Gleichheit geprüft wurden //if (offeneKlammern > 0 && geschlosseneKlammern > 0) { return 1; // weil es für den weiteren Programmcode nur ausschlaggeben ist ob der return größer 0 ist //return offeneKlammern; } else { return 0; } } return -1;
-
Gobbles schrieb:
// ... if (offeneKlammern == geschlosseneKlammern) { return offeneKlammern; // weil es für den weiteren Programmcode nur ausschlaggeben ist ob der return größer 0 ist } return -1;
ftfy.
~// edith: Tagsoup~
-
Wenn wir schon mal bei dieser Funktion dabei sind, wieso nicht ein
bool
als Rückgabewert? Du hast noch mindestens eine andere Funktion, wo du einenint
statt einesbool
zurückgibst. Dann kannst du nämlich auch die Funktion gleich in der If-Abfrage hinschreiben. Und wenn du den Namen noch etwas anpasst, dann bekommst du sowas:if(enthältKlammern()) { // ... }
Wobei ich persönlich auf deutsche Bezeichner verzichten würde. Und ja, Umlaute und solches Zeug sind erlaubt als Variablenname.
Für den Fehlerfall, also wo die Anzahl Klammern nicht übereinstimmen, solltest du auch einen Fehler werfen. Heisst du solltest dann besser Exceptions verwenden. Am besten machst du dir eine
MathTermSyntaxException
oder sowas.
-
Dravere schrieb:
Am besten machst du dir eine
MathTermSyntaxException
oder sowas.Bzw. für Fälle wo man etwas beobachtet was eigentlich überhaupt gar nicht sein dürfte, z.B. weil man den Input eigentlich schon validiert hat, und dann doch noch einen Fehler findet, eine
InternalErrorException
.
-
Int als rückgabe hatte ich gewählt um die 3 Zustände (keine Klammer,Klammer oder fehlerhafte Klammersetzung) zu bekommen.
Mit Exceptions habe ich bis dato noch nichts gemacht, werde mir es mal anschauen was das so kann