Problem mit LinkedList

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Problem mit LinkedList

Beitrag von PureBasic4.0 »

Hi, Leute

Ich möchte, dass kein Element in einem ListViewGadget doppelt vorkommt. Alle Elemente sind in einer LinkedList gespeichert, weil ich die Daten hinterher wieder brauche und nicht extra den Inhalt des ListViewGadgets auslesen möchte.

Hier der Code:

Code: Alles auswählen

Global NewList Words.s()
[...]
      String$ = InputRequester("Eingabe","Bitte geben Sie das Wort ein","")
      If String$ <> ""
        ok = 1
        ForEach Words()
          If Words() = String$
            ok = 0
          Else
            ok = 1
          EndIf
        Next
        If ok = 1
          AddElement(Words())
          Words() = String$
          AddGadgetItem(#First_Wortliste,FirstWortlistePos,String$)
        Else
          MessageRequester("Fehler","Das Wort "+String$+" existiert bereits",#MB_ICONSTOP)
        EndIf
      EndIf
Wenn man z.B.: 123 einfügt und dann gleich wieder 123, gibt es wie gewünscht eine Fehlermeldung:

Bild

Wenn ich jetzt aber z.B.: 1234 einfüge und dann wieder 123 einfüge, bekomme ich keinen Fehler:

Bild

Warum?
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Du musst die ForEach-Schleife verlassen, wenn das Wort bereits in der LL steht.

Code: Alles auswählen

If Words() = String$
 ok = 0
 Break
Else
 ok = 1
EndIf
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

warum bin ich da nicht drauf gekommen? sonst mache ich das mit break immer, aber heute... :lol: :lol: :lol:

Danke, Kiffi :allright:
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Little John

Beitrag von Little John »

Nur so am Rande: Der ELSE-Zweig ist an der Stelle nicht nötig, es reicht 'ok' vor Beginn der ForEach-Schleife auf 1 zu setzen:

Code: Alles auswählen

Global NewList Words.s()
[...]
      String$ = InputRequester("Eingabe","Bitte geben Sie das Wort ein","")
      If String$ <> ""
        ok = 1
        ForEach Words()
          If Words() = String$
            ok = 0
            Break
          EndIf
        Next
        If ok = 1
          AddElement(Words())
          Words() = String$
          AddGadgetItem(#First_Wortliste,FirstWortlistePos,String$)
        Else
          MessageRequester("Fehler","Das Wort "+String$+" existiert bereits",#MB_ICONSTOP)
        EndIf
      EndIf
Gruß, Little John
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Danke :allright: :allright:
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Antworten