Leuchtmittel

dmidi

Mitglied
dere leute,
soll in einer klasse leuchtmittel mithilfe von objektfeldern beschreiben, dannmit einen konstruktor diese in parameter übersetzen und schließlich noch die werte ausgeben, die lichtausbeute berechnen,prüfen ob es sich um eine ennergiesparlampe handelt und stromkosten berechnen.
hier die klasse dazu:

Java:
public class Leuchtmittel
{
    public int leistungsaufnahme;
    public int lichtstrom;
    public String lichtfarbe;
    
    public Leuchtmittel(int leistungsaufnahme,int lichtstrom, String lichtfarbe)
    {
        this.leistungsaufnahme = leistungsaufnahme;
        this.lichtstrom = lichtstrom;
        this.lichtfarbe = lichtfarbe;
    }
    
    public void print(int leistungsaufnahme,int lichtstrom, String lichtfarbe)
    {
        Out.println("Die Lampe hat folgende Werte:");
        Out.println("  - Leistunstungsaufnahme: " + leistungsaufnahme + "Watt");
        Out.println("  - Lichtstrrom: " + lichtstrom + "Lunen");
        Out.println("  - Lichtfarbe: " + lichtfarbe);
    }
    
    public double getLichtausbeute(int leistungsaufnahme,int lichtstrom)
    {
        int lichtausbeute = lichtstrom / leistungsaufnahme;
        return lichtausbeute;
    }
    
    public boolean istEnergiesparlampe(int leistungsaufnahme,int lichtstrom, String lichtfarbe, int lichtausbeute)
    {
        if (lichtausbeute >= 40) return true;
        else return false;
    }
    
    public double getKosten(double stunden, double strompreis)
    {
        double kosten = stunden * strompreis;
        return kosten;
    }
}

so und nun soll ich in einer tesklasse die obige methoden teilweise aufrufen:

Java:
public class Test
{
    public int leistungsaufnahme = 8, lichtstrom = 400;
    public String lichtfarbe = "warmweiß";
    public double Kosten = 0.2, Stunden = 10;

    public void main(String [] args)
   {
       Leuchtmittel.Leuchtmittel(leistungsaufnahme, lichtstrom, lichtfarbe);
       Leuchtmittel.print(leistungsaufnahme, lichtstrom, lichtfarbe);
       Out.println("Die Lichtausbeute beträgt " + Leuchtmittel.Lichtausbeute(leistungsaufnahme, lichtstrom) + "lm/W");
       if (Leuchtmittel.istEnergiesparlampe) Out.println("Es handelt sich bei ihrem Leuchtmittel um eine Emergiesparlampe!");
       else Out.println("Es handelt sich bei ihrem Leuchtmittel um keine Energiesparlampe!");
       Out.println("Die Stromkosten betragen " + Leuchtmittel.getKosten + "€");
    }
}

nun meldet mir der compiler in zeile 9 der testklasse

Code:
cannot find symbol - method Leuchtmittel(int, int, java.lang.String)

irgendjemand ne idee was ich falsch mache?
 

javimka

Top Contributor
Es gibt keine Methode mit dem Namen "Leuchtmittel", sondern dies ist ein Konstruktor, den du nur mit [c]new Leuchtmittel(int,int,String)[/c] aufrufen kannst. So wie du es verwendest, müsste es eine statische Methode sein.

Schreibe
Java:
Leuchtmittel leuchmittel = new Leuchtmittel(leistungsaufnahme, lichtstrom, lichtfarbe);
leuchtmittel.print();
...
 

eRaaaa

Top Contributor
?!
Naja, du solltest zu aller erst ein Objekt von Leichtmittel erstellen!
Java:
Leuchtmittel leuchtmittel1 = new Leuchtmittel(8,400,"warmweiß");
dann kannst du auf leuchtmittel1 Methoden der Klasse aufrufen z.B. print etc.

Was in deiner "Test-Klasse"
Java:
 public int leistungsaufnahme = 8, lichtstrom = 400;
    public String lichtfarbe = "warmweiß";
    public double Kosten = 0.2, Stunden = 10;
zu suchen haben, weiss ich nicht ??!!

Auch sehen die Methodendeklarationen merkwürdig aus. Wieso muss man den nochmal die Leistungsaufnahme, Lichtstrom etc. übergeben?!
 

dmidi

Mitglied
ich sollte ja an einem bsp testen ob alles funktioniert, deswegen habe ich die werte eben gleich so aufgelistet

und zur methodendeklaration, ich sollte auch folgendes machen:
Definieren Sie einen Konstruktor fü̈r die Klasse Leuchtmittel, der alle Objektfelder auf die
übergebenen Parameter setzt.

aber danke schon mal für die bisherige hilfe

allerdings sagt mir der compiler in test klasse, zeile
non static variable leistungsaufnahme cannot be applied from a static context
 

eRaaaa

Top Contributor
Also wenn du mich fragst: Ich würde ALLE Paramter bei den Methoden(nicht Konstruktor!!!) rausnehmen, so macht das imo keinen Sinn.
Desweiteren kannst du in der Methode istEnergiesparlampe dann anstelle von [c]lichtausbeute >= 40[/c] einfach [c]getLichtausbeute() >= 40[/c] aufrufen !

Java:
public class Leuchtmittel {
    public int leistungsaufnahme;
    public int lichtstrom;
    public String lichtfarbe;

    public Leuchtmittel(int leistungsaufnahme, int lichtstrom, String lichtfarbe) {
	this.leistungsaufnahme = leistungsaufnahme;
	this.lichtstrom = lichtstrom;
	this.lichtfarbe = lichtfarbe;
    }

    public void print() {
	Out.println("Die Lampe hat folgende Werte:");
	Out.println("  - Leistunstungsaufnahme: " + leistungsaufnahme + "Watt");
	Out.println("  - Lichtstrrom: " + lichtstrom + "Lunen");
	Out.println("  - Lichtfarbe: " + lichtfarbe);
    }

    public double getLichtausbeute() {
	int lichtausbeute = lichtstrom / leistungsaufnahme;
	return lichtausbeute;
    }

    public boolean istEnergiesparlampe() {
	if (getLichtausbeute() >= 40)
	    return true;
	else
	    return false;
    }

    public double getKosten(double stunden, double strompreis) {
	double kosten = stunden * strompreis;
	return kosten;
    }
}

Deine Testklasse:
Java:
    public static void main (String[] args){
	Leuchtmittel leuchtmittel1 = new Leuchtmittel(8, 400, "warmweiß");
	leuchtmittel1.print();
	if(leuchtmittel1.istEnergiesparlampe()){
	    Out.println("Es handelt sich bei ihrem Leuchtmittel um eine Emergiesparlampe!");
	}
	Out.println(leuchtmittel1.getKosten(10, 0.2));
    }
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Vllt noch einen kleiner Zusatz der mir gerade noch auffällt:
Java:
    public double getLichtausbeute() {
    int lichtausbeute = lichtstrom / leistungsaufnahme;
    return lichtausbeute;
    }

int / int ist immer ein Integer. D.h. du wirst da nie eine Kommazahl herausbekommen wie du es vllt erwarten würdest! (int lichtausbeute - return double ist eh etwas merkwürdig ;D )

Java:
    public double getLichtausbeute() {
    double lichtausbeute = 1.0 * lichtstrom / leistungsaufnahme; //oder auf double casten
    return lichtausbeute;
    }
 

Oben