Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi FOR - Schleife mit unterbrechung (https://www.delphipraxis.net/164547-schleife-mit-unterbrechung.html)

Marcel2906 17. Nov 2011 13:26

Delphi-Version: 2010

FOR - Schleife mit unterbrechung
 
Diesmal hab ich eine einfache Frage glaub ich, doch leider fin dich dazu nichts bzw. weiß nicht wonach ich suchen soll.

Undzwar möchte ich eine For schleife unterbrechen und wieder fortsetzen, also quasi:

Delphi-Quellcode:
For i := 0 to 2 and 5 to 8 do begin
Also i soll einmal mit dem wert 1, dann mit wert 2 die schleife durchlaufen, danach auf 5 springen...
Doch geht sowas überhaupt, wenn ja, wie sieht es dann richtig aus?

Bernhard Geyer 17. Nov 2011 13:28

AW: FOR - Schleife mit unterbrechung
 
Mit einer for-schleife nicht.

Hier müsstest du eine while-schleife machen:

Delphi-Quellcode:
i := 0;
while i < 8 do
begin
  ...

  Inc(i);

  if i = 3 then
    i := 5:
end;

Marcel2906 17. Nov 2011 13:33

AW: FOR - Schleife mit unterbrechung
 
dann könnte ich es aber auch so machen, oder:

Delphi-Quellcode:
For i := 0 To 2 Do Begin
   //Anweisung
End;
For i := 5 To 8 Do Begin
   //Anweisung
End;

Sir Rufo 17. Nov 2011 13:36

AW: FOR - Schleife mit unterbrechung
 
Ja, wenn es trotzdem noch DRY ist

Marcel2906 17. Nov 2011 13:36

AW: FOR - Schleife mit unterbrechung
 
Dry ?

Bummi 17. Nov 2011 13:37

AW: FOR - Schleife mit unterbrechung
 
Delphi-Quellcode:
for i in [1..2,5..8] do .....

Sir Rufo 17. Nov 2011 13:37

AW: FOR - Schleife mit unterbrechung
 
Zitat:

Zitat von Marcel2906 (Beitrag 1136669)
Dry ?

Don't Repeat Yourself

gammatester 17. Nov 2011 13:37

AW: FOR - Schleife mit unterbrechung
 
Klar geht das mit einer For-Schleife:
Delphi-Quellcode:
  for i:=0 to 8 do begin
    if i in [3,4] then continue;
    writeln(i);
  end;

DeddyH 17. Nov 2011 13:37

AW: FOR - Schleife mit unterbrechung
 
Du kannst das auch so machen:
Delphi-Quellcode:
For i := 0 To 8 Do Begin
   if i in [0..2, 5..8] then
     ...
End;
Oder Du verlagerst den Code in eine eigene Routine, der Du das "Teilarray" übergibst.

[edit] :lol: gammatester hatte den gleichen Gedanken, nur andersherum umgesetzt [/edit]

Sir Rufo 17. Nov 2011 13:38

AW: FOR - Schleife mit unterbrechung
 
Zitat:

Zitat von Bummi (Beitrag 1136670)
Delphi-Quellcode:
for i in [1..2,5..8] do .....

Die Bummi-Routine sieht am elegantesten aus :thumb:

Marcel2906 17. Nov 2011 13:39

AW: FOR - Schleife mit unterbrechung
 
Zitat:

Zitat von Bummi (Beitrag 1136670)
Delphi-Quellcode:
for i in [1..2,5..8] do .....

genau so etwas hatte ich mir vorgestellt :)

DeddyH 17. Nov 2011 13:43

AW: FOR - Schleife mit unterbrechung
 
Allerdings haben alle Varianten mit dem "in" den gleichen Nachteil: i muss sich im Byte-Bereich bewegen.

himitsu 17. Nov 2011 13:47

AW: FOR - Schleife mit unterbrechung
 
Du kannst statt dem SET auch ein Integer-Array verwenden ... läßt sich ja notfalls auch live deklarieren.

http://www.delphipraxis.net/1134380-post577.html

Bummi 17. Nov 2011 13:52

AW: FOR - Schleife mit unterbrechung
 
oder auch
Delphi-Quellcode:
Type
  TI=Array of Integer;
var
  i:INteger;
begin
  for I in TI(VarArrayOf([1,2500,700])) do Memo1.Lines.add(IntToStr(i));
end;

DeddyH 17. Nov 2011 14:03

AW: FOR - Schleife mit unterbrechung
 
Oder auch:
Delphi-Quellcode:
procedure TForm1.DoSomethingSenseless(Values: array of integer);
var
  i: integer;
begin
  for i := Low(Values) to High(Values) do
    Memo1.Lines.Add(IntToStr(Values[i]));
end;
Das dürfte auch in älteren Delphi-Versionen funktionieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz