Schlaufen etc.

Adrian Lenherr

Schon öfters habe ich bemerkt, dass verschachtete Schlaufen nicht gänzlich richtig funktionieren. So kommt es vor, dass eine if-Schlaufe in einer anderen if-Schlaufe vom Programm nicht beachtete wird, obwohl es das sollte.

Auch bei anderen Schleifen ist mir dies aufgefallen zum Beispiel hier:

Idee: Finden leerer Einträge im Array aTemp() der ersten dimension, falls dies so ist muss das Array verschoben werden und um eins verkleinert

Private Sub ReDimaTemp()
Dim i As Integer = 0 'Zähler für äussere Schleife
Dim j As Integer'Zähler für innere Schleife
While i < aTemp.GetLength(0)
If aTemp(i, 1) = "" Then'Durchlauf des Arrays und suchen leerer Einträge
j = i 'Startpunkt j der inneren Schlaufe = äussere Schleife
While j < aTemp.GetLength(0)'durchlauf des Arrays bis zum schluss und löschen verschieben der Arrays um 1
aTemp(j, 0) = aTemp(j+1, 0)
aTemp(j, 1) = aTemp(j+1, 1)
j = j + 1
End While
ReDim Preserve aTemp(j - 2, 1)'Redimensionierung des Arrays, da alle um 1 verschoben wurden
i = i - 1'reduzierung von i, da der gleiche Eintrag des Arrays nochmals geprüft werden muss.
End If
i = i + 1'Lauf bis zum Schluss und wenn nötig wird die innere Schlaufe nochmals durchlaufen
End While
End Sub



Vielleicht habe ich etwas übersehen!?
gruss Adrian

Philipp Knecht

Hi Adrian

Versuch mal den folgenden Code dann können wir eine Exception ausschliessen.
[quote]
Private Sub ReDimaTemp()
Dim i As Integer = 0 'Zähler für äussere Schleife
Dim j As Integer 'Zähler für innere Schleife
Try
While i < aTemp.GetLength(0)
If aTemp(i, 1) = "" Then 'Durchlauf des Arrays und suchen leerer Einträge
j = i 'Startpunkt j der inneren Schlaufe = äussere Schleife
While j < aTemp.GetLength(0) 'durchlauf des Arrays bis zum schluss und löschen verschieben der Arrays um 1
aTemp(j, 0) = aTemp(j+1, 0)
aTemp(j, 1) = aTemp(j+1, 1)
j = j + 1
End While
ReDim Preserve aTemp(j - 2, 1) 'Redimensionierung des Arrays, da alle um 1 verschoben wurden
i = i - 1 'reduzierung von i, da der gleiche Eintrag des Arrays nochmals geprüft werden muss.
End If
i = i + 1 'Lauf bis zum Schluss und wenn nötig wird die innere Schlaufe nochmals durchlaufen
End While
Catch Ex As Exception
MsgBox(Ex.Message)
End Try
End Sub

hth

Adrian Lenherr

Sali Philipp

Danke an diesen hint, daran habe ich nicht mehr gedacht! Ich konnte das Problem beheben obwohl auch diese Debugversion relativ gewöhnungsbedrüftig ist.

Das Problem war ein Indexfehler und Schlaufen und Funktionen werden bei einem Fehler eben abgebrochen. Halt wie normales Coding.


Gruss&Merci Adrian
0

Comments

0 comments

Please sign in to leave a comment.

Didn't find what you were looking for?

New post