Autor Beitrag
DocSol
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 07.09.09 11:09 
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).

ausblenden 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];   // Die aufgabe wird aus dem Memo-Feld gelesen

    // In Liste.Strings[0] steht eine Zahl sowie auch in Liste.Strings[2] 
    // also nicht wundern

    // ---------- Aufruf der GetInt-Funktion -----------------------------------
    zahl1 := GetInt(Liste.Strings[0]);  // Übergabe der Zahlen an die Funktion
    zahl2 := GetInt(Liste.Strings[2]);  // zum konvertieren der Werte

    // ---------- Operatoren konvertieren --------------------------------------
    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
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: 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
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Mo 07.09.09 16:02 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
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.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 07.09.09 16:07 
Da ist was dran. Aber wie gesagt, man müsste den Code von GetInt() einmal sehen.