# ArrayListe erstellen mit vielen (unendlichen) Weren ???



## khstgt (16. Dez 2009)

Guten Abend,
kann mir vllt. jemand bei folgendem Problem helfen.
Ich möchtse über JOptionPane unendlich viele Werte (Tageskurse) eingeben und auch speichern um später mit ihnen zu rechnen.
mein code sieht bis jetzt folgendermaßen aus:


Problem ist erstmal das leider bei der zweiten while-Schleife eine Endlosschleife entsteht. Wie kann ich das abstellen?
Was muss ich tun damit theoretisch unendlich viele Tageskurse gespeichert werden können und diese auch angezeigt werden bzw ich mit ihnen weiter arbeiten kann?

vielen Dank

mfG
khstgt


----------



## javimka (16. Dez 2009)

In Zeile 35 musst du prognosetage statt frage1 mit einem Wert vergleichen. Das wäre wohl sowas wie [c]prognosetage==2[/c]

In die ArrayList kannst du ja soviele Werte aufnehmen, wie du willst.

Wenn du damit weiterrechnen willst, kannst du sie entweder jedesmal mit liste.get(index) aus der Liste rausnehmen, oder du konvertierst sie in ein Array: 
Double[] array = tageskursliste.toArray(new Double[tageskursliste.size()]);


----------



## khstgt (16. Dez 2009)

der Vgl. in Zeile 35 ist denke ich soweit richtig denn sobald man oben eine "2" eingibt soll nach dem Prognosezeitraum eingegeben werden.
Problem ist nur das eine Endlosschleife entsteht ...:--(


----------



## javimka (16. Dez 2009)

khstgt hat gesagt.:


> denn sobald man oben eine "2" eingibt soll nach dem Prognosezeitraum eingegeben werden.


 ???:L

Um die erste Schleife zu verlassen, muss frage1="1" sein. Wenn das so ist, wird die erste Schleife verlassen und die zweite startet. In dieser Schleife wird der Wert von frage1 nirgendwo geändert. Folglich bleibt er imm "1" und daraus folgt, dass die Schleife niemals verlassen wird.


----------



## javimka (16. Dez 2009)

Übrigens
http://www.java-forum.org/java-basics-anfaenger-themen/92954-neue-variablen-schleife-anlegen.html


----------



## khstgt (16. Dez 2009)

vielen DankProblem mit der Endlosschleife gelöst:


Jedoch habe ich weiterhin das Problem das ich ja wie in meiner Anfangsfrage zu sehen ist unendlich viele 
Werte eingeben können soll
habe ja auch schon die Variablen "ersterkurs" und "nächsterkurs" in die Arraylist gespeichert.
Gibt der Benutzer an das er einen weiteren Kurs eingeben will (also hier z.b. den 3 Tageskurs) habe ich das Problem das dieser in der Arraylist den Wert von "nächsterkurs" überschreibt, so kann ich im Augenblick nur 2 Werte speichern.
Wo liegt mein Fehler?

vielen Dank


----------



## javimka (16. Dez 2009)

Du musst [c]tageskursliste.add(ersterkurs);[/c] vor die erste while-Schleife stellen und [c]tageskursliste.add(nächsterkurs);[/c] in die Schleife hinein. Dann wird der kurs gleich in die Liste aufgenommen und du kansnt die Variable wieder überschreiben.

Du solltest Zeichen wie ä,ä,ü eigentich in Programmen vermeiden.


----------



## khstgt (16. Dez 2009)

vielen Dank @javimka

also kann jetzt beliebig viele Eingaben speichern
und habe evtl. ä,ö,ü entfernt.

ich hoffe mal das das dann die letzte Frage ist für dieses Programm:

habe ja jetzt die einzelnen Werte.
wie kann ich mit diesen nun rechnen?
also Aufgabe wäre wert2 - wert1 = diff1
                          wert3 - wert 2 =diff2
                          .
                          .
                          .
                           usw.
dann sollen alle diff zusammengezählt werden und durch ihre Anzahl dividiert werden.

die einzelnen Rechnungen dazu sind nicht das Problem sondern welchen Name die verschienden Werte jetzt haben da ich ja immer den nächsten vom vorgigen abziehen muss?


----------



## javimka (16. Dez 2009)

Wenn du damit weiterrechnen willst, kannst du sie entweder jedesmal mit [c]liste.get(index)[/c] aus der Liste rausnehmen, oder du konvertierst sie in ein Array: [c]Double[] array = tageskursliste.toArray(new Double[tageskursliste.size()]);[/c]


----------



## khstgt (16. Dez 2009)

könntest du das genauer erklären?

ich muss zugeben das es mir überhaupt nichts sagt.


----------



## javimka (16. Dez 2009)

Hier im letzten Beitrag habe ich genau das Problem schon gelöst. Dort war es mit Integer, du machst es halt mit Double.


----------



## khstgt (16. Dez 2009)

also so?



Fehlermeldung: possible loss of precision
required int
found double
cannot find symbol
symbol: method get(double)


----------



## javimka (16. Dez 2009)

Das i bleibt natürlich ein Integer 


```
double[] array = new double[tageskursliste.size()];
      for (inti=0;i<tageskursliste.size();i++) {
      array[i] = Double.parseDouble(tageskursliste.get(i));
```


----------



## khstgt (16. Dez 2009)

geändert und bekomme:
method parseDouble in class java.lang.Double cannot applied to given types
required java.lang.String
found java.lang.Double

bezieht sich auf die unterste Zeile tageskursliste.get (i)


----------



## javimka (16. Dez 2009)

Ups, du hast ja gar keine Strings, sondern du hast es sogleich in Double konvertiert. Ich würde vorschlagen, du konvertierst es in ein Array und arbeitest damit weiter. Beim Array ist es einfacher darauf zu lesen und zu schreiben, als bei der ArrayList.

```
Double[] array = tageskursliste.toArray(new Double[tageskursliste.size()]); // Liste in Double[] Array konvertieren
double[] diff = new double[array.length-1]; // Differenzen
for (int i=0;i<array.length;i++) {
  diff[i] = array[i+1]-array[i];
}
```


----------



## khstgt (16. Dez 2009)

vielen Dank erstmal...w
wie kann ich jetzt in deinem Code

durch die Anzahl der Differenzen teilen und diese Zahl erstmal ausgeben?


----------



## javimka (16. Dez 2009)

die Anzahl Differenzen kriegst du mit [c]diff.length[/c] oder [c]array.length-1[/c]
Und mit System.out.println(...) kannst du das ja dann ausgeben


----------



## khstgt (16. Dez 2009)

die IDE gibt soweit keine fehler aus nur beim Run des programms kommr folgende Meldung:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
        at grundlagenuebungen.StockEstimation.main(StockEstimation.java:40)

die Medlung bezieht sich auf zeile 40 meines Codes:


----------



## javimka (16. Dez 2009)

es muss diff, statt array heissen
[c]for (int i=0;i<diff.length;i++) {[/c]


----------



## khstgt (16. Dez 2009)

in meinem jetzt funktionierenden Code 



fehlt mir noch folgendes:

ich möchte den letzten eingegebenen Tageskurs + (prognosetage * diff_) als Endergebnis ausgeben.
auf die variable prognosetage die in zeile 32 eingegeben wird kann ich nicht richtig zugreifen im augenblick.
Zweite Frage ist wie ich den  letzten eingegebenen Tageskurs finde und eben auch in mein Endergebnis einbinden kann_


----------



## javimka (16. Dez 2009)

Wo liegt denn genau das Problem? Kennst du System.out.println() nicht? Würde doch viel schneller gehen, das mal selber zu überlegen.

Das letzte Element eines Arrays kriegst du mit array[array.length-1]


----------



## khstgt (16. Dez 2009)

System.out.println() ist mir bekannt

es geht darum das ich als erstes eben den letzten Tageskurs finden muss
als nächstes die Anzahl der Prognosetage. An diese Variable "prognosetage" komme ich aber nicht heran zumindet im augenblick nicht.
mir ist klar wieich zur Endausgabe komme nur ist mir nicht klar wie ich eben an die 3 dafür nötigen Angaben komme.


----------



## javimka (16. Dez 2009)

Wieso kommst du nicht an prognosetage heran? Das müsste funktionieren.


----------



## khstgt (16. Dez 2009)

wenn ich im code


eingebe
kommt:
varibale prognosetage might not have been initialized


----------



## javimka (16. Dez 2009)

Schreibe in Zeile 14
[c]int prognosetage = 0;[/c]

Sonst kann der Compiler nicht davon ausgehen, dass wirklich etwas auf prognosetage gespeichert worden ist.


----------



## khstgt (16. Dez 2009)

habe jetzt versucht meine Endausgabe so hinzubekommen:



also letzter Tageskurs + (Durschnittlicher Anstieg * Prognosetage)

Error:
illegal start of expression

not a statement

';' expected


----------



## javimka (17. Dez 2009)

[c][array.length-1][/c] heisst gar nichts


----------



## khstgt (17. Dez 2009)

kann man eine variable erstellen
also z.b.
double letzterkurs = [array.length-1]???


----------



## javimka (17. Dez 2009)

Ich glaube, du willst eigentlich nichts weiter als [c]array[array.length-1][/c]


----------



## khstgt (17. Dez 2009)

dankeschön

wirklich sehr nette und hilfreiche Hilfe

Schönen Abend wünsche ich noch

mfg
khstgt


----------

