# Werte aus ArrayList multiplizieren und dann Ergebnis addieren



## Okter (7. Jan 2012)

Hallo,

mein Sortiment besteht aus folgenden Artikeln:


```
sortiment.add(new Artikel(13456, "Turnschuh blau", 30, 45, 20));
		sortiment.add(new Artikel(13457, "Sporttasche schwarz", 20, 35, 30));
		sortiment.add(new Artikel(13458, "Sporthose grau", 10, 20, 45));
```

Es soll der Wert der Waren im Lager berechnet werden. Dafür muss der dritte Wert/Nettoeinkaufspreis (30) und der letzte Wert/Lagerbestand (20) jedes einzelnen Artikels multipliziert werden und dann letztendlich addiert werden (Wert Turnschuhe+Wert Sporttasche+Wert Sporthose) (So hätte ich es zumindest gemacht)

Meine Java-Code sieht so aus:


```
public void berechneGesamtwert() {

		double summe=0;
		for (int i=0; i<=sortiment.size(); i++) {
			Artikel artikel = sortiment.get(i);
			gesamtwertArtikel=artikel.getNettoeinkaufspreis()*artikel.getLagerbestand();
			summe=summe+gesamtwertArtikel;
			}
			
		gesamtwertText.setText(""+summe);
```

Artikel artikel = sortiment.get(i) stimmt wohl eher nicht (das Programm stürzt ab, ich weiß aber auch nicht ob der Rest stimmt)
Wie wähl ich denn die Artikel aus der ArrayList richtig an bzw. wo liegt mein Fehler? 

Wenn mir jemand helfen könnte, wär ich sehr dankbar


----------



## Tobias (7. Jan 2012)

Der höchste Index einer List ist immer list.size() - 1. Wenn du die Exception gelesen hättest, hätte dir das selbst auffallen können (IndexOutOfBounds).

Edit: Damit einem sowas nicht passiert, ist es seit Java 5 Best Practice solche Schleifen als


```
for(Artikel a : sortiment) {
    // Deine Berechnung
}
```

zu schreiben.


----------



## Okter (7. Jan 2012)

Tobias hat gesagt.:


> Der höchste Index einer List ist immer list.size() - 1. Wenn du die Exception gelesen hättest, hätte dir das selbst auffallen können (IndexOutOfBounds).
> 
> Edit: Damit einem sowas nicht passiert, ist es seit Java 5 Best Practice solche Schleifen als
> 
> ...



Wow, danke. Das merk ich mir. Hab mich gerade echt gefreut, als es lief. Hab schon seit einer Stunde rumprobiert. Hast mein Vormittag gerettet. Danke (und das nächste mal versuch ich mich ernsthafter mit den Fehlermeldungen auseinanderzusetzen)


----------



## faetzminator (8. Jan 2012)

Und du hast sowieso keine Variable [c]gesamtwertArtikel[/c] definiert. Oder aber als Klassenvariable, was ein Designfehler wäre.
Ich würde aber noch die Berechnung von der Ausgabe trennen und nicht mit [c]""[/c] arbeiten.
Zusätzlich lässt sich [c]summe=summe+gesamtwertArtikel;[/c] mit [c]summe += gesamtwertArtikel;[/c] abkürzen, was zu folgendem Code führt:

```
public double berechneGesamtwert() {
    double summe = 0.0;
    for(Artikel a : sortiment) {
        summe += a.getNettoeinkaufspreis() * artikel.getLagerbestand();
    }
    return summe;
}

public void updateGesamtwert() {
    gesamtwertText.setText(String.valueOf(berechneGesamtwert()));
}
```
Da fragt sich dann nur noch, warum der Artikel weiss, wie viele es von ihm gibt, und nicht eine Klasse Lager o.ä.


----------

