# for each-Schleife



## Maxga (11. Jun 2009)

Guten Tag,
habe eine ArrayList erstellt, mit " List <String> antworten = new ArrayList <String>();".
Wollte diese jetzt mit einer Methode durchsuchen: 

```
public String durchsuchen(String a)
            {
                   for (a: antworten)
                   {
                          return(a); // Gibt jedes Element nur ein mal in der Liste
                   } 
            }
```
Doch er sagt mir bei "for(a:antworten)" "not a Statement", und irgendwie weiß ich net woran es liegt, bin ich gerade blöde?
Soll übrigens ein Chatbot werden, der auf Schlüsselwörter reagiert, die in der Liste gespeichert werden. Mit der Methode soll geschaut werden, ob ein Schlüsselwort dadrin vorkommt, und wenn ja, stellt dieses den Rückgabewert der Methode dar.

MfG


----------



## maki (11. Jun 2009)

foreach geht doch nur bei Collections, abgesehen davon ist deine Syntax falsch.


----------



## Maxga (11. Jun 2009)

Achso, ich habe mir heute zum ersten Mal for-each angeschaut, und auf der Seite: 
Foreach in Java
Wurde das so beschrieben. Was ist an meiner Syntax falsch?

MfG


----------



## Schandro (11. Jun 2009)

> foreach geht doch nur bei Collections


ArrayList ist ne Collection.


Wegen der Syntax:
Sobald in einer Methode return aufgerufen wird, ist diese abgeschlossen. Bei deinem Code würde also immer das erste Element zurückgegeben werden. 

Damit's mit dem Compilen klappt, musst du auch den Typ von a angeben:

```
for (String a: antworten){..
```


----------



## Maxga (11. Jun 2009)

Der Typ wurde doch schon in den Parametern angegeben?
Und da es sich um Keywords handelt, kommt jedes nur einmal vor, es soll also nur das erste, welches er findet, ausgeben.

MfG

Edit: Also, hab es mir so vorgestellt, dass in den Parametern dann z.B. "Hund" übergeben würde, und das erste "Hund" dass er in der Liste findet, wird zurückgegeben.


----------



## Schandro (11. Jun 2009)

Nur zum sichergehen das du foreach richtig verstanden hast: Mit einer foreach-Schleife durchläuft man ALLE Einträge in einer Collection. Falls du also einen bestimmten Eintrag in der Collection suchen willst, musst du die Logik per Hand einbauen (einfache if-Abfrage ob das aktuelle Element dem gesuchten entspricht).

Wegen dem:

```
for (String a: antworten){..
```
[Bei meiner Java-Version 1.6] ist es so, dass man den Typ direkt angeben muss und das man keine Variable benutzen kann, die bereits existiert. Deswegen musst du "String" vor "a" dazuschreiben.


----------



## maki (11. Jun 2009)

> ArrayList ist ne Collection.


Er hat aber vor mit dem Parameter a vom Typ String zu arbeiten 

Brauchst keine Schleife, verwende einfach die contains Methode der Collection, wenn dir das zu langsam wird, bietet sich ein HashSet an.


----------



## Maxga (11. Jun 2009)

Das ist natürlich einfacher, danke. Und nein, ich glaube ich hatte die for-each Schleife nicht richtig verstanden, dazu war die Ausführung auf der Seite doch etwas zu knapp, jetz hab ichs aber, danke

MfG


----------



## sliwalker (11. Jun 2009)

In der foreach-Schleife muss Du dennoch einen Typ angeben.
So ist die Syntax eben.

Deine Methode hat aber noch einen Fehler. Normal dürfte das so gar nicht kompilieren, denn wenn die Liste leer ist, gibst Du nichts zurück und das geht beim return-Type String eben nicht.

Nimm aber besser sowieso contains(), wenn Du ausschließlich nur prüfen willst, ob der String da drin ist.

greetz
SLi


----------



## maki (11. Jun 2009)

Hab vergessen zu erwähnen das eine RegEx früher oder später doch die bessere Lösung ist...


----------



## Maxga (11. Jun 2009)

Was ist eine RegEx?
Habe jetzt noch ein weiteres Problem, kann jetz Elemente der Liste hinzufügen und schauen ob sie drauf sind etc.,
nur ist das natürlich alles nur für eine Instanz des Programms, sprich wenn ich das Programm neu starte sind alle Keywords wieder weg.
Wie speicher ich in Java denn Listen? Damit jedes mal wenn ich das starte, die Keywords überprüft werden können.

MfG

Edit: Ich sollte vielleicht mal sagen, worum es überhaupt geht, soll in Java den "ELIZA" Chatbot realisieren. Und irgendwie komm ich net weiter, ich könte natürlich immer alle Keywords in if-Abfragen abfragen, und dann ne Antwort dazu schreiben, das ist aber nicht schön, darum würde ich die gerne in ner Liste speichern, die durchsuche, und dann ne Antwort dazu ausgeben, ich weiß nur noch nicht wirklich wie ich das realisieren soll.


----------



## Landei (12. Jun 2009)

Dafür gibt es viele Varianten: Datenbanken, xml-Files, Property-Files, CVS...


----------



## bygones (12. Jun 2009)

maki hat gesagt.:


> foreach geht doch nur bei Collections, abgesehen davon ist deine Syntax falsch.


das ist so falsch... foreach geht bei allen Strukturen die Iterable implementieren.


----------



## Landei (12. Jun 2009)

... und bei arrays


----------

