| Autor |
Beitrag |
Pepp3r
      
Beiträge: 82
|
Verfasst: So 12.09.10 15:40
Hallo liebe Delphicommunity,
Ich habe mal wieder ein merkwürdiges Problem. In meinem Programm wird ein FOR-Schleife öffter durchlaufen als sie sollte.
Die Schleife wird durchlaufen bei
Delphi-Quelltext
was ja eigentlich nicht sein dürfte.
Der Quellcode:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| PeinFilm = ^TeinFilm;
TeinFilm = record cover, titel, jahr, regie, genre, alternativ, kommentar, bewertung, lokal, id: String; next, prev: PeinFilm; end;
TFilm = class(TObject) private first, dummy: PeinFilm; function readFilm(nummer: Word): PeinFilm; public property getFilmData [ nummer: Word ]: PeinFilm read readFilm; end;
function TFilm.readFilm(nummer: Word): PeinFilm; var i: Word; begin dummy := first; for i := 1 to nummer do begin if not (dummy.next = nil) then dummy := dummy.next; else begin result := dummy; exit; end; end; result := dummy; end;
procedure TForm1.Button2Click(Sender: TObject); begin showmessage(Filmliste.getFilmData[1].titel);
end; |
Vllt bin ich zu doof ich weiß es nicht.
Danke für jede Hilfe.
Gruß
Jonas
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: So 12.09.10 15:48
Was auch korrekt ist. Die Schleife wird einmal mit dem Index i = 1 durchlaufen. Analog dazu wird die Schleife for i := 1 to 2 zwei Mal durchlaufen. Entsprechend mit den Indizes 1 und 2.
Grüße
Marc
|
|
Pepp3r 
      
Beiträge: 82
|
Verfasst: So 12.09.10 15:53
Meiner Erfahrung nach wird die Schleife so oft durchlaufen bis for und to den selben Wert haben. Demnach müsste die schleife garnicht durchlaufen werden?!?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 12.09.10 15:59
Dann müsstest du eine While-Schleife nehmen
_________________ Markus Kinzler.
|
|
Pepp3r 
      
Beiträge: 82
|
Verfasst: So 12.09.10 16:00
Also stimmts, dass for i:=1 to 1 genau einmal durchlaufen wird?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 12.09.10 16:01
Ja.
_________________ Markus Kinzler.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: So 12.09.10 16:02
Anscheinend richten sich die Delphi-Entwickler nicht nach deiner Erfahrung. Meiner Erfahrung nach ist die Abbruchbedingung immer Grenze < Laufvariable und nicht <=.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: So 12.09.10 16:03
Leider funktioniert das nicht so, wie Du willst.
For i := a to x do ...
läuft i solange durch bis i = x ist. also 1x, falls x und a = 1 sind. Wilst Du die Schleife nie durchlaufen, muss x kleiner als a sein :
Dann muss Du schreiben:
For i := 1 to nummer -1 do ...
|
|
Pepp3r 
      
Beiträge: 82
|
Verfasst: So 12.09.10 16:06
Okay ich danke euch.
Edit:// richtige schleifenwahl war hier die lösung, mit for i:=1 to nummer-1 gabs ebenfalls probleme. mit der while schleife klappts nun.
Habe nun noch zwei weitere Fragen für die ich einen Thread spare:
1.: Gibt es für Funktionen einen Resultbefehl der einen exit beinhaltet?
2.: Gibt es in Delphi ein this-keywort wie bei java?
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: So 12.09.10 16:13
Auch ein Blick in den Debugger-Code hätte geholfen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| 00464808 B801000000 mov eax,$00000001 0046480D 90 nop 0046480E 48 dec eax 0046480F 75FC jnz $0046480d 00464811 C3 ret |
Gruß
Marc
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 12.09.10 16:27
| Zitat: | | 1.: Gibt es für Funktionen einen Resultbefehl der einen exit beinhaltet? |
Nein.
| Zitat: | | 2.: Gibt es in Delphi ein this-keywort wie bei java? |
Ja: self
_________________ Markus Kinzler.
|
|
Pepp3r 
      
Beiträge: 82
|
Verfasst: So 12.09.10 16:44
mkinzler hat folgendes geschrieben : | | Zitat: | | 1.: Gibt es für Funktionen einen Resultbefehl der einen exit beinhaltet? | Nein.
| Zitat: | | 2.: Gibt es in Delphi ein this-keywort wie bei java? | Ja: self |
self macht soweit ich weiß nicht die variablen im prozedurkopf sichtbar?!
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: So 12.09.10 16:48
Darf ich dich auf die Regel "Neue Frage, neues Topic" hinweisen. Ist für die Übersicht besser und auch falls jemand die gleiche Frage mal haben sollte, erleichtert diese Regel die Suche.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 12.09.10 17:11
Hallo,
Auch nochmal von offizieller Stelle:
bitte erstelle für jede deiner Fragen ein separates Topic, da die Diskussion mehrerer Fragen in einem Topic für gewöhnlich für Verwirrung und Durcheinander sorgt. Daher:
*geschlossen*
Die bereits gegeben Antwort lasse ich mal drin, sollten weitere Fragen sein, erstelle bitte getrennte Themen dazu.
Viele Grüße,
Martok
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|