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

Fungi

Mitglied
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:

Java:
	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
 
Falsch:
Java:
zwischenWert = ((Geschenk)iter).getWert();

Richtig:
Java:
Geschenk geschenk = iter.next();
zwischenWert = geschenk.getWert();
 
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:
Java:
	double berechneGesamtWert(){
		Iterator<Geschenk> iter = geschenke.iterator();
			while (iter.hasNext()){
				Geschenk geschenk = iter.next();
				zwischenWert = geschenk.getWert();
				gesamtWert += zwischenWert;
			}
			return gesamtWert;
	}
 
Vermutlich ahst du irgendeine Variable falsch. Zeig mal ein wenig Mehr Code. Vorallem diese volle Klasse und die Klasse Geschenk.
 
Java:
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. 😉
 
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.
 
Java:
public static void main(String[] args) {
Wunschzettel wunschzettel = new Wunschzettel();
wunschzettel.fuegeGeschenkAn(...);
double wert = wunschzettel.berechneGesamtWert();
...
}
 
ah! .. Ich sollte mir mal lieber nen Kaffee holen!
so hatte ichs vor, hab aber die Klammern bei "new Wunschzettel();" vergessen.

vielen Dank! 🙂
 

Neue Themen


Zurück
Oben