Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Frage zu for Schleifen (https://www.delphipraxis.net/64430-frage-zu-schleifen.html)

kabuco 3. Mär 2006 14:35


Frage zu for Schleifen
 
Hallo,

ich habe eine Frage bezüglich FOR-Schleifen: Gibt es eine Möglichkeit FOR-Schleifen forzeituig zu unterbrechen und neu anzufangen. Ich habe in einer FOR-Schleife ein Paar If-Anweisungen und wenn die erste erfüllt wird, dürchläuft die Schleife die anderen If-Anweisungen auch, das ist ja Blödsinn :roteyes: !

kabuco

alcaeus 3. Mär 2006 14:38

Re: Frage zu for Schleifen
 
:gruebel:
hast du sowas?
Delphi-Quellcode:
for i := 1 to 5 do
begin
  if (a) then
    do_a();
  if (b) then
    do_b();
end;
Willst du jetzt die Schleife wieder bei 1 beginnen, wenn eine Bedingung zutrifft, oder willst du einfach zum naechsten Schleifenschritt springen?
Evtl. solltest du dir mal Delphi-Referenz durchsuchenbreak und Delphi-Referenz durchsuchencontinue ansehn :)

Greetz
alcaeus

mkinzler 3. Mär 2006 14:42

Re: Frage zu for Schleifen
 
Willst du die Schleife abbrechen oder nur den einen Durchlauf? Wenn 1. dann
Delphi-Quellcode:
break();
wen 2.) dann einfach
Delphi-Quellcode:
else if
oder case-Anweisung verwenden.

alcaeus war schneller

kabuco 3. Mär 2006 14:48

Re: Frage zu for Schleifen
 
Danke für die Schnellen Antworten erst mal!
Ich möchte, wie alcaeus gesagt hat, zum nächsten Schleifenschritt springen. Gibt es da eine Funktion, den meiner Meinung nach brechen break und exit die Prozedur ab.

Kabuco

[edit]Upps, habe mir gerade den Hilfetext zu 'continue' angesehen, und da ist, was ich suchte! Danke für die Antworten[/edit]

SirThornberry 3. Mär 2006 14:49

Re: Frage zu for Schleifen
 
wenn du bei einer bestimmten Bedingung die Schleife wieder von ganz vorn beginnen lassen wölltest müsstest du die Zählvariable ja zurücksetzen
Delphi-Quellcode:
var LCount: Integer;
    LBreakCount: Integer;
begin
  LBreakCount := 0;
  for LCount := 1 to 5 do
  begin
    ListBox1.Items.Add(IntToStr(LCount));
    if (LCount = 5) and (LBreakCount < 1) then
    begin
      LCount := 0; //auf 0 und nicht 1 weil am Ende der schleife LCount erhöht wird
      inc(LBreakCount);
    end;
  end;
Dabei wird aber der Compiler meckern weil es nicht erlaubt ist innerhalb einer schleife die Zählvariable zu verändern.

Aber es gibt doch eine Möglichkeit diese Zählvariable zu verändern.
Ab hier sollten nur die jenigen weiterlesen die genau wissen was sie tun und sich des Risikos bewusst sind. (schließlich hat es gründe das der Compiler das nicht zulassen will)
Und zwar holen wir uns dazu einfach die Adresse der Zählvariablen und schreiben an diese Stelle im Speicher den gewünschten Wert. Somit ist es keine direkte Zuweisung auf die Zählvariable da wir ja eigentlich irgendwo im Speicher schreiben (und "zufällig" ist es eben die Adresse der Zählvariablen)
Delphi-Quellcode:
var LCount: Integer;
    LBreakCount: Integer;
begin
  LBreakCount := 0;
  for LCount := 1 to 5 do
  begin
    ListBox1.Items.Add(IntToStr(LCount));
    if (LCount = 5) and (LBreakCount < 1) then
    begin
      PInteger(@LCount)^ := 0; //auf 0 und nicht 1 weil am Ende der schleife LCount erhöht wird
      inc(LBreakCount);
    end;
  end;

Angel4585 3. Mär 2006 14:51

Re: Frage zu for Schleifen
 
also es gibt noch "Continue" das müsste das sein was du suchst


Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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