Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Doppelter Wert in StringList trotz Schleife
DocSol - Mo 07.09.09 11:09
Titel: Doppelter Wert in StringList trotz Schleife
Ich bins mal wieder...
mein Problem jetzt ist bestimmt ziemlich simpel aber ich komme nicht drauf.
Ich habe eine FOR-Schleife, die solange durchlaufen soll bis I (:=0) den Wert von der Anzahl meiner Memo-Feld-Zeilen erreicht hat.
Pro Durchlauf wird in meine Stringlist etwas geschrieben.
Wenn ich dann nach der For- Schleife eine Messagebox mit "StringList.Text" ausgeben lasse stehen da zwar zwei Werte drinne, aber immer nur der erste Wert (bei zwei Werten also der erste Eintrag doppelt usw).
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| for I := 0 to mem_Eingaben.Lines.Count - 1 do begin aufgabe := mem_Eingaben.Lines[I]; zahl1 := GetInt(Liste.Strings[0]); zahl2 := GetInt(Liste.Strings[2]); if (Liste.Strings[1] = 'plus') OR (Liste.Strings[1] = '+') then ergebnis.Add(IntToStr(zahl1 + zahl2)); if (Liste.Strings[1] = 'minus') OR (Liste.Strings[1] = '-') then ergebnis.Add(IntToStr(zahl1 - zahl2)); if (Liste.Strings[1] = 'mal') OR (Liste.Strings[1] = '*') then ergebnis.Add(IntToStr(zahl1 * zahl2)); if (Liste.Strings[1] = 'geteilt durch') OR (Liste.Strings[1] = '/') then ergebnis.Add(IntToStr(round(zahl1 / zahl2))); end; ShowMessage(ergebnis.text); |
Beispielergebnis bei zwei Rechnungen:
Die beiden Aufgaben: 2 + 3 und 2 + 5
In ergebnis.Text sollte also nun sowas stehen:
5
7
Es steht aber sowas als Text in der Stringlist:
5
5
Ich glaube das es sich um nen ziemlich kleinen, mal wieder total blöden Fehler handelt... aber ich sehe ihn einfach nicht
Delete - Mo 07.09.09 12:08
Auf Anhieb kann ich jetzt auch nichts entdecken. Setz doch einfach einen Breakpoint auf die "for"-Zeile und steppe einmal durch, welchen Verlauf das Programm nimmt.
Gammatester - Mo 07.09.09 12:48
Ist doch logo, daß immer das gleiche rauskommt, wenn Du immer die gleichen Operationen durchführst. Besser wäre es, statt immer Liste.Strings[0], Liste.Strings[1], Liste.Strings[2] zu verwenden, irgendetwas variables zu nehmen, zb mem_Eingaben.Lines[I] zu parsen und nicht nur an die Variable aufgabe zuweisen?
Oder übersehe ich da was?
Gammatester
Delete - Mo 07.09.09 15:43
So wie ich das verstehe, ist GetInt eine Art "Explode"-Funktion, die den Ausdruck in 3 Teile zerlegt. Sollte das nicht stimmen, kann es natürlich daran liegen. Ansonsten einfach mal den Code von GetInt posten.
Gammatester - Mo 07.09.09 16:02
DeddyH hat folgendes geschrieben : |
| So wie ich das verstehe, ist GetInt eine Art "Explode"-Funktion, die den Ausdruck in 3 Teile zerlegt. Sollte das nicht stimmen, kann es natürlich daran liegen. Ansonsten einfach mal den Code von GetInt posten. |
Mag sein, aber die würde ja auch immer mit konstanten Werten gefüttert: Wenn sich Liste.Strings[0], Liste.Strings[1] und Liste.Strings[2] nicht irgendwie ändern, kann immer nur das gleiche Resultat rauskommen.
Delete - Mo 07.09.09 16:07
Da ist was dran. Aber wie gesagt, man müsste den Code von GetInt() einmal sehen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!