# Mal wieder: Cannot make a static reference to the non-static method



## Fungi (8. Jan 2011)

Guten Morgen, alle zusammen..!

Ich habe hier eine Klasse "Wunschzettel". In dieser habe ich eine Liste mit verschiedenen Objekten der Klasse "Geschenk" angelegt, die unter Anderem auch das Attribut "Wert" besitzen. Jetzt möchte ich mit einer Methode den "Gesamtwert" aller Geschenke dieser Liste ausgeben lassen.

Methode:


```
double berechneGesamtWert(){
		Iterator<Geschenk> iter = geschenke.iterator();
			while (iter.hasNext()){
				zwischenWert = ((Geschenk)iter).getWert();
				gesamtWert += zwischenWert;
			}
			return gesamtWert;
	}
```

wenn ich die Methode in der main dann allerdings mit "berechneGesamtWert" aufrufe, bekomme ich den Fehler: "Cannot make a static reference to the non-static method berechneGesamtWert() from the type Wunschzettel".

Gleiches gilt auch für andere Methoden dieser Klasse ... wie kann ich das Problem lösen? Ich wäre euch echt dankbar 

Liebe Grüße und ein schönes Wochenende,
Fungi


----------



## Noctarius (8. Jan 2011)

Falsch:

```
zwischenWert = ((Geschenk)iter).getWert();
```

Richtig:

```
Geschenk geschenk = iter.next();
zwischenWert = geschenk.getWert();
```


----------



## Fungi (8. Jan 2011)

ah, logisch!
Ich darf mich ja nicht direkt auf die Klasse, sondern auf ein Objekt beziehen..

danke.

Aber das war noch nicht alles - die Fehlermeldung bleibt die gleiche.

aktueller Stand:

```
double berechneGesamtWert(){
		Iterator<Geschenk> iter = geschenke.iterator();
			while (iter.hasNext()){
				Geschenk geschenk = iter.next();
				zwischenWert = geschenk.getWert();
				gesamtWert += zwischenWert;
			}
			return gesamtWert;
	}
```


----------



## Noctarius (8. Jan 2011)

Vermutlich ahst du irgendeine Variable falsch. Zeig mal ein wenig Mehr Code. Vorallem diese volle Klasse und die Klasse Geschenk.


----------



## Fungi (8. Jan 2011)

```
package weihnachten;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class Wunschzettel {
	private String name;
	static List<Geschenk> geschenke = new LinkedList<Geschenk>();
	private double gesamtWert;
	private double zwischenWert;

	void fuegeGeschenkAn(Geschenk geschenk) {
		geschenke.add(geschenk);
	}

	double berechneGesamtWert() {
		Iterator<Geschenk> iter = geschenke.iterator();
		while (iter.hasNext()) {
			Geschenk geschenk = iter.next();
			zwischenWert = geschenk.getWert();
			gesamtWert += zwischenWert;
		}
		return gesamtWert;
	}

	String generiereWunschzettel() {
		StringBuilder bui = new StringBuilder();
		Iterator<Geschenk> iter = geschenke.iterator();
		while (iter.hasNext()) {
			String s = ((Geschenk) iter).toString();
			bui.append(s);
		}
		return bui.toString();
	}

	List<Geschenk> sucheGeschenkeVon(String beziehung) {
		
		}

	}

	List<Geschenk> sucheGeschenkeAb(double Wert) {

	}

	List<Geschenk> sucheGeschenkeBis(double Wert) {

	}

	public Wunschzettel(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public List<Geschenk> setGeschenke() {
		return geschenke;
	}

	public static void main(String[] args) {

		// Personen definieren
                //...

		// Artikel definieren
		//...

		// Geschenke definieren
		// ...

		// Geschenkliste befuellen
		// ...

		berechneGesamtWert();

	}

}
```

Den Teil, wo die Personen, Artikel und letztendlich Geschenke definiert werden, hab ich mal weggelassen - das macht das ganze nur unübersichtlich.


----------



## Noctarius (8. Jan 2011)

berechneGesamtWert ist nicht statisch und kann ohne Instanz deiner Klasse nicht ausgeführt werden. Du solltest auch die List nicht statisch machen, sondern lieber eine Instanz erzeugen.


----------



## Fungi (8. Jan 2011)

mmh ... tut mir Leid. Aber ich steh' heute morgen ganz schön auf dem Schlauch 
wie stelle ich das an?


----------



## Noctarius (8. Jan 2011)

```
public static void main(String[] args) {
Wunschzettel wunschzettel = new Wunschzettel();
wunschzettel.fuegeGeschenkAn(...);
double wert = wunschzettel.berechneGesamtWert();
...
}
```


----------



## Fungi (8. Jan 2011)

ah! .. Ich sollte mir mal lieber nen Kaffee holen!
so hatte ichs vor, hab aber die Klammern bei "new Wunschzettel();" vergessen.

vielen Dank!


----------



## Noctarius (8. Jan 2011)

Bring mir einen mit, bin erst um 9 nach Hause gekommen  Ergo jetzt entweder Kaffee oder schlafen *g*


----------

