# neue Variablen in Schleife anlegen



## walter911 (9. Dez 2009)

Hallo,

ich habe in kurzform folgende Aufgabenstellung:

1. Dialog: Eingabe des ersten Tageskurses.
2. Dialog: Eingabe des naechsten Tageskurses.
3. Dialog: Frage, ob ein weiterer Wert eingegeben werden soll (\ja" fueuhrt zu einer
Wiederholung der Dialoge 2 und 3, \nein" fuhrt zu Dialog 4).


jetzt setze ich um die Dialoge 2 und 3 eine While Schleife.
Funktioniert auch gut. Aber wie kann ich es realisieren, dass der nächste Tageskurs (also im prinzip der 3te) automatisch einer neuen Variable zugewiesen wird und der n-te (also z.b. 4,5,6... usw) auch.

Wieviele Tageskurse eingegeben werden ist nicht bekannt. Wie kann ich Variablen für die neu Eingegebenen Werte erstellen.

```
String kurs1 = JOptionPane.showInputDialog(null,"Eingabe des ersten Tageskurses.");
String neuerWert = "ja";

while (neuerWert.equals("ja")) {
String kurs2 = JOptionPane.showInputDialog(null,"Eingabe des naechsten Tageskurses.");
neuerWert = JOptionPane.showInputDialog(null,"Soll ein weiterer Wert eingegeben werden?","ja oder nein eingeben");}
```

Das Problem ist ja nun, dass wenn die Schleife wieder zu der Eingabe springt, der kurs2 ja neu festgesetzt wird. Ich möchte aber alle eingegebenen Kurse speichern


----------



## javimka (9. Dez 2009)

Weisst du, wie viele Kurse kommen werden? Dann verwende ein Arrays: String kurse = new String[n].
Dann kannst du in der Schleife schreiben [c]kurse[i++] = kurs2[/c].

Wenn du nicht weisst, wie viele Kurse kommen, kannst du eine ArrayList verwenden: ArrayList<String> kurse = new ArrayList<String>();
In der while-Schleife schreibst du dann: kurse.add(kurs2);


----------



## walter911 (9. Dez 2009)

javimka hat gesagt.:


> Weisst du, wie viele Kurse kommen werden? Dann verwende ein Arrays: String kurse = new String[n].
> Dann kannst du in der Schleife schreiben [c]kurse[i++] = kurs2[/c].
> 
> Wenn du nicht weisst, wie viele Kurse kommen, kannst du eine ArrayList verwenden: ArrayList<String> kurse = new ArrayList<String>();
> In der while-Schleife schreibst du dann: kurse.add(kurs2);



Danke.

Ich weiß nicht wie viele kommen werden.

Es muss dann in der Schleife so aussehen oder?

```
while (neuerWert.equals("ja")) {
String kurs2 = JOptionPane.showInputDialog(null,"Eingabe des naechsten Tageskurses.");
kurse.add(kurs2); 
neuerWert = JOptionPane.showInputDialog(null,"Soll ein weiterer Wert eingegeben werden?","ja oder nein eingeben");}
```

verändern oder bleibt das kurs2
kurse.add(kurs2); schreib ich einfach in die while Schleife

kann ich nicht auch ArrayList kurse = new ArrayList(); anstatt deine Version mit den <string> schreiben?


----------



## javimka (9. Dez 2009)

ja, das ist richtig so.

Das <String> könntest du auch weglassen, solltest du aber nicht. Die ArrayList kannst du für jeden Objekt Typ verwenden, nennt sich Generics. Aber wenn du weisst, für welche Objekte die Liste gebraucht wird, solltest du es in <> angeben.


----------



## walter911 (9. Dez 2009)

Danke das klappt ja soweit.

Im Prinzip werden ja nur Zahlen eingegeben und später muss ich ja mit denen rechnen.
Wäre es dan nicht angebracht eine Arraylist des typs int zu nehmen oder spricht irgendetwas dagegen?


----------



## eRaaaa (9. Dez 2009)

walter911 hat gesagt.:


> Danke das klappt ja soweit.
> 
> Im Prinzip werden ja nur Zahlen eingegeben und später muss ich ja mit denen rechnen.
> Wäre es dan nicht angebracht eine Arraylist des typs int zu nehmen oder spricht irgendetwas dagegen?



jaein 
es können nur objekte verwendet werden, also musst du den wrapper Integer benutzen, also statt int, musst du da Integer in die klammern setzen


----------



## javimka (9. Dez 2009)

Um die Strings in int oder Integer zu konvertieren verwende Integer.parseInt(string)


----------



## walter911 (9. Dez 2009)

den parseint Befehl kenne ich. Ich dachte nur ich kann die Eingaben direkt als int machen. Aber das parsen ist ja kein Problem.

Ich hab jetzt aus der arraylist ein Array gemacht

String[] kursearray = kurse.toArray(new String[kurse.size()]);
System.out.println(kursearray.length);

Wenn ich mir aber die Länge des Arrays ausgeben lassen möchte kommt:
run:
[4, 4]
BUILD SUCCESSFUL (total time: 7 seconds)

das sind die Werte die ich eingegeben habe.


----------



## eRaaaa (10. Dez 2009)

mhm? komisch 
wie sieht denn dein code jetzt aus? 

und wieso willst du die arraylist jetzt eig. zu einem array umwandeln?


----------



## walter911 (10. Dez 2009)

eRaaaa hat gesagt.:


> mhm? komisch
> wie sieht denn dein code jetzt aus?
> 
> und wieso willst du die arraylist jetzt eig. zu einem array umwandeln?



Das hat was mit der kompletten Aufgabenstellung zutun.
Ich hab in dem Array ja eine gewissen Anzahl an Werten (Zahlen)
und diese Zahlen muss ich wie folgt berechnen:

Zahl2-Zahl1= neuezahl
Zahl3-Zahl2=neuezahl2
Zahl4-Zahl5=neuezahl3
usw. bis die länge des arrays erreicht ist. Wenn ich das Problem gelöst hab hab ich die Aufgabe so gut wie fertig.

Folgender Code dachte ich zeigt mir die 3. Stelle des Arrays an(statdessen gibt er aber das ganze array aus  ):

```
String[] kursearray = kurse.toArray(new String[kurse.size()]);
System.out.println(kursearray[2]);
```
tut es aber auch nicht. Das Ergebnis ist:


> run:
> [1, 2, 3, 5]
> BUILD SUCCESSFUL (total time: 10 seconds)



Selbst wenn ich sie printline Zeile weglasse zeigt mir das Programm das array an


----------



## javimka (10. Dez 2009)

Du musst doch irgendwelche Berechnungen damit anstellen. Du könntest die Liste auch in ein Integer Array konvertieren:

```
int[] array = new int[list.size()];
for (int i=0;i<list.size();i++) {
  array[i] = Integer.parseInt(list.get(i));
}
```


----------



## haber (19. Dez 2009)

Sitze an der gleichen Aufgabe und habe trotz genauem durchlesen dieses Themas keine Ahnung wie ich nun die einzelnen Durchgänge(eingegebene Kurswerte) in einzelne neu estellte Variablen schiebe.
Geht sowas nur mit arrays? Ich verstehe arrays trotz durchlesens vieler Erklärungen nicht.


----------



## javimka (19. Dez 2009)

Ein Array sind einfach mehrere Elemente nebeneinander. Willst du z.B. ein Array mit 8 Zahlen schreibst du:
[c]int[] zahlen = new int[8];[/c]

Das erste Element ist dann an der Stelle 0, also zahlen[0]. Das letzte Element ist an der Stelle 7 (hier), also zahlen[7].
Allgemein kann man die Länge eines Arrays mit array.length herausfinden, hier wäre zahlen.length also gerade 8.

Wenn man nun mit jedem einzelnen Element etwas machen will, was immer mehr oder weniger dasselbe ist, dann macht man das in einer for-Schleife. Will man z.B. in jedes Feld i die Zahl i*i hineinsetzen, kann man das machen mit

```
for (int i=0;i<array.length;i++) {
  array[i] = i*i;
}
```


----------



## haber (19. Dez 2009)

Ok danke, ich versuch damit zu arbeiten. Ich komm bereits voran


----------

