Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Möglichkeiten einen Schritt der for-Schleife zu überspringen (https://www.delphipraxis.net/1248-moeglichkeiten-einen-schritt-der-schleife-zu-ueberspringen.html)

Daniel B 5. Nov 2002 21:11


Möglichkeiten einen Schritt der for-Schleife zu überspringen
 
Nabend allerseits,

welche möglichkeiten gibt es um in einer for-Schleife, einen durchlauf zu überspringen?

Code:
for i := 0 to 9 do
begin
  if i <> 4 then
  begin
    tuedies := unddas;
  end;
end;
So in der Art. Welche möglichkeiten gibt es noch?

Grüsse, Daniel :hi:

Tpercon 5. Nov 2002 21:39

Warum keine While Schleife?
Code:
i:=0;
while i<=9 do
 If i=3
  then Inc(i,2)
  else Inc(i);
Wobei das auch nicht viel eleganter ist.

Daniel B 5. Nov 2002 21:44

Zitat:

Zitat von Tpercon
Wobei das auch nicht viel eleganter ist.

Nicht wirklich. :wink:

Grüsse, Daniel :hi:

PS: ich dachte eher an sowas: if i = 4 then i := 5 oder i +1

Tpercon 5. Nov 2002 21:50

Tja, aber sonst wüßt ich auch nichts...

Gruß zurück :hi:

Luckie 5. Nov 2002 22:20

Das Problem ist, in einer for-Schleife kannst du dioe Zählvariable nicht verändern. Deswegen ist wohl eine while-Schleife das beste.

Daniel B 5. Nov 2002 22:45

Vielleicht was zum warum, der Frage.

In einer LV sind Einträge, welch Wunder... :roll:
Nur einem dieser Einträge, kann eine 1 zugewiesen werden, ich muss also alle, bis auf den Markierten auf 0 setzen. Dazu müsste ich eben den Markierten Eintrag überspringen. Je nachdem welchen ich auf 1 setze, alle anderen müssen dann automatisch auf 0 gesetzt werden.

Grüsse, Daniel :hi:

Daniel 5. Nov 2002 22:52

Hallo Daniel,

ich sehe noch nicht, warum sich dies nicht elegant mit einer FOR-Schleife lösen läßt:
Delphi-Quellcode:
For index:= 0 To myListView.Items.Count-1 Do
Begin
  If myListWiew.Items[Index].Selected Then
    myListView.Items[Index]._welche_Property_auch_immer:= 1
  Else
    myListView.Items[Index]._welche_Property_auch_immer:= 0;
End;
Warum nicht so?

Christian Seehase 5. Nov 2002 23:16

Moin Zusammen,

oder so:

Delphi-Quellcode:
for i := 0 to ListView1.Items.Count-1 do
begin
  ListView1.Items[i].BeliebigeEigenschaft := ord(ListView1.Items[i].Selected);
end;
Damit hätte man auch Multiselect erledigt.

Wenn es definitiv nur ein Eintrag ist, könnte man sich auch eine Form Property einrichten, die jeweils den Index des zuletzt gewählten Eintrages enthält (initial -1). Dann hätte man immer den Index des Eintrages, dass beim Wechsel des Selected Items auf 0 gesetzt werden müsste, und könnte gezielt, via ListView1.Selected.Index, den einen Eintrag ansprechen, bei dem auf 1 gesetzt werden muss. Dieser Index kommt dann in die Property.
Das könnte sich, zumindest bei vielen Werten, ausgesprochen positiv auf die Laufzeit auswirken. (im Gegensatz zum Durchlauf durch alle Items)

Hansa 6. Nov 2002 00:24

Hi,

Zitat:

Zitat von Luckie
Das Problem ist, in einer for-Schleife kannst du die Zählvariable nicht verändern. Deswegen ist wohl eine while-Schleife das beste.

Das ist aber nicht so. Ob while oder for ist eigentlich egal. Der Unterschied besteht darin, daß die for-Schleife bis zum bitteren Ende durchlaufen wird oder eine Exception eintritt :mrgreen:.

Das Bsp. von Typercon ist ein klassischer Fall. Variable bleibt Variable. bei 9 tritt der exit-Fall ein. Würde man schreiben :

FOR i:= 1 TO 10000

würde die 9 der while schleife ignoriert, das entspräche dann for i := 1 to 9. Das ginge ja noch.

Gruß
Hansa

Luckie 6. Nov 2002 00:28

Das meine ich:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to 10 do
  begin
    Listbox1.Items.Add(IntToStr(i));
    i := i + 2;
  end
end;
Du kannst die Zählvariable innerhalb der for-Schleife nicht verändern! Und das hatte er ja vor, siehe hier:
Zitat:

PS: ich dachte eher an sowas: if i = 4 then i := 5 oder i +1


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.
Seite 1 von 2  1 2      

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