# Falsche Auswertung der if-Abfrage



## hugo (5. Jan 2005)

Hallo...

ich habe ein Problem bei der Auswertung der if-Abfrage!


```
while (max > 0)
         {
           Zeichen = GpsDatenEingang.read();
           if ((Zeichen != '\n' && Zeichen != '\r') && (Zeichen >= 0))
           {
             DatenSatz = DatenSatz.append((char)Zeichen);
           }
           else
           {
             if(Zeichen == '\n')
             {
                String Daten = DatenSatz.toString();
                // Macht annähernd das gleiche, wie der Sun-StringTokenizer und gibt bei next Token einen String zurück
                OwnStringTokenizer Token = new OwnStringTokenizer(Daten, ',');
                // mit nextToken() wird das erste Element des Tokens ausgelesen
                Def = Token.nextToken();
                // Ausdruck zur Überprüfung des String
                String regex = "GPGLL";
                /* Wenn in Def "$GPGLL" steht, soll er true zurückgeben und den ganzen String einem Vektor
                 * hinzufügen.
                 */
                if(Def.indexOf(regex) > 0);
                {
                  Positionen.addElement(Daten);
                  System.out.println(Def);
                }
                DatenSatz = new StringBuffer();
                max--;
             }
           }
         }
```
Ich lasse mir nun Def ausgeben um zu prüfen, ob die If-Anweisung auch ordentlich auswertet. Interessanterweise entspricht Def nicht regex.


----------



## Bleiglanz (5. Jan 2005)

da sind mehrere ifs, kannst du dich nicht genauer ausdrücken?



> String regex = "GPGLL";
> /* Wenn in Def "$GPGLL" steht, soll er true zurückgeben und den ganzen String einem Vektor
> * hinzufügen.
> */


mit oder ohne $, was soll das sein?

Was liefert


> GpsDatenEingang.read();


ein char? warum castet du dann nochmal



> Interessanterweise entspricht Def nicht regex.


sehr interessant, und das heisst?

deinem "regex" entsprechen heisst, die Kette "GPGLL" enthalten?


----------



## hugo (5. Jan 2005)

Es geht um diese if-Anweisung.

```
if(Def.indexOf(regex) > 0);
                {
                  Positionen.addElement(Daten);
                  System.out.println(Def);
                }
```
Dass Dollarzeichen ist in der Zeichenkette immer vorhanden, man hätte als regex also auch nehmen können: "$GPGLL". Das ist eine Zeichenkette(bzw. ein Teil davon) von einem GPS-Empfänger. Deshalb steht auch in der if-Bedingung ">0" weil es das erste Zeichen ja nicht sein kann.



> Was liefert
> Zitat:
> 
> GpsDatenEingang.read();
> ...


Nein, read liefert in dem Fall nur int. Deshalb das Casten.

Richtig, Def soll regex enthalten, um ausgegeben zu werden. Wenn ich mir Def ausgeben lasse ergeben sich Zeichenketten, wie zum Beispiel: "$GPGSV", "$PGRME", "$GPGLL", "$PGRMZ".

Hugo


----------



## Bleiglanz (5. Jan 2005)

Lustig

```
String regex = "GPGLL";
   if(Def.indexOf(regex) > 0);
```
beachte das überflüssige Semikolon am ende


----------



## hugo (5. Jan 2005)

Danke Bleiglanz, manchmal können die Fehler so nahe liegen und man findet sie trotzdem nicht!

Hugo


----------

