Compiler-Fehler Konstruktor - Methode

  • Themenstarter Themenstarter Extremiie
  • Beginndatum Beginndatum
E

Extremiie

Gast
Hallo zusammen,

Ich habe vor 2 Tagen angefangen mit Java zu programmieren.
Das was ich bis jetzt gelernt habe, wollte ich in mein eigenes kleines Programm einsetzen.

Leider hat das compilen aber nich geklappt, könnt ihr mir sagen, was hier der Fehler sein könnte?


Compiler Fehler:

error: invalid method declaration; return type required
Fruechte(String bananen, String orangen, String erdbeeren, int preis) {



Java:
class Fruechte {
	String m_bananen;
	String m_orangen;
	String m_erdbeeren;
	int m_preis;

Früchte(String bananen, String orangen, String erdbeeren, int preis) {
	m_bananen = bananen;
	m_orangen = orangen;
	m_erdbeeren = erdbeeren;
	m_preis = preis;
	}

void preisErhoehen() {
	m_preis += preisErhoehen;
	}

void datenAusgeben() {
	System.out.println("\n");
	System.out.println("Bananen: " + m_bananen);
	System.out.println("Orangen: " + m_orangen);
	System.out.println("Erdbeeren: " + m_erdbeeren);
	}
}

public class FruechteBeispiel {
public static void main (String[] args) {
	
	// Früchte definieren
	Fruechte bananen = new Fruechte("Bananen",50);
	Fruechte orangen = new Fruechte("Orangen",75);
	Fruechte erdbeeren = new Fruechte ("Erdbeeren",100);
	
	// Preis erhöhen
	orangen.preisErhoehen(10);
	erdbeeren.preisErhoehen(15);
	
	// Daten ausgeben
	bananen.datenAusgeben();
	orangen.datenAusgeben();
	erdbeeren.datenAusgeben();
	}
}

Es wäre auch nett wenn ihr mir Tipps geben würdet wie man den Code zum Beispiel verkleinern könnte, aber bitte langsam und deutlich, bin ein absoluter Anfänger ;-)

Vielen Dank,
Extremiie
 
Zuletzt bearbeitet von einem Moderator:
Deine Klasse heißt
Code:
Fruechte
, dein Konstruktor aber
Code:
Früchte
. Die müssen identisch lauten, und da man Umlaute vermeiden sollte wäre
Code:
Fruechte
der richtige Name.
 
> error: invalid method declaration; return type required

sagt dir die Fehlermeldung gar nichts, hast du sie gelesen?
hat für dich im Zusammenhang mit Methoden der Begriff 'return type' irgendeine Bedeutung?
 
Java:
class Fruechte {
    String m_bananen;
    String m_orangen;
    String m_erdbeeren;
    int m_preis;
 
Früchte(String bananen, String orangen, String erdbeeren, int preis) {
    m_bananen = bananen;
    m_orangen = orangen;
    m_erdbeeren = erdbeeren;
    m_preis = preis;
    }

Du hast eine Klasse "Fruechte" und einen Konstruktor "Früchte". Die beiden Namen sollten gleich geschreiben werden. Am besten auf Umlaute verzichten. Dem Konstruktor kannst du noch ein public voranstellen. Und wenn du dann Objekte von Fruechte erzeugst (mit new Fruechte...), dann müssen die Parameter, welche im Konstruktor angegeben siond, übereinstimmen.
 
Du hast wahrscheinlich einen Konstruktor bauen wollen. Der muss aber genauso heißen wie Deine Klasse. Sonst denkt Java, es sei eine normale Methode und da braucht man einen return-Type (void, wenn sie nichts zurück geben soll).
 
Ich würde abgesehen davon deinen Konstruktor so schreiben:

Java:
Fruechte(String bananen, String orangen, String erdbeeren, int preis) {
    this.bananen= m_bananen;
    this.orangen= m_orangen;
    this.erdbeeren= m_erdbeeren;
    this.preis = m_preis;
    }

Best regards,
 
Des Weiteren rufst du in der Main Konstruktoren auf, die nicht existieren:
Java:
// Früchte definieren
    Fruechte bananen = new Fruechte("Bananen",50);
    Fruechte orangen = new Fruechte("Orangen",75);
    Fruechte erdbeeren = new Fruechte ("Erdbeeren",100);
Du hast aber nur
Java:
Fruechte(String, String, String, int)
in der Klasse definiert. Warum verwendest du nicht einen Konstruktor Fruechte(String frucht, int preis) und definierst eine Instanzvariable frucht oder besser noch eine Liste von Strings mit Namen fruechte...

EDIT: IdR stehen Klassennamen für Einzahlobjekte, in deinem Fall also Frucht, nicht Fruechte.
 
Ich habe zuvor alles mit Früchte gemacht und versucht, dann alles in Fruechte zu ändern, da hab ich leider etwas übersehen.

Vielen Dank für die schnellen Antworten,
Extremiie
 
Würde dir empfehlen, Eclipse o.ä. zu downloaden.

Du übergibst dem Objelt nur Name und Preis, hast aber in deinem Konstruktor 4 Dinge deklariert.

Ein Konstruktor wird aufgerufen, sobald du mit "new" ein neues Objekt erstellst.

Dein Konstruktor und dein Objekt passen jedoch nicht zusammen.

Dann müsste dein Konstruktor so aussehen, wenn nur Name & Preis:

Java:
//pseudo-code
public Frueche(String name, int preis){
this.name= name;
this.preis= preis;
}


EDIT: Abgesehen davon ist deine Methode falsch.
Du kannst etwas nicht so inkrementieren:

Java:
void preisErhoehen() {
    m_preis += preisErhoehen;
    }

preisErhoehen ist bei dir der Methodenname, aber keine Variable.
solltest ne Variable anlegen.
 
Ich bin etwas verwirrt. Was bedeutet .this?

Und wie bringe ich diesen Befehl zum laufen?
Fruechte erdbeeren = new Fruechte ("Erdbeeren",100);

Eigentlich habe ich dieses Beispiel vom Buch verändert:
Mitarbeiter billy = new Mitarbeiter("bla..........

Wie kann man den Mitarbeiter, in Fruechte ändern?

Vielen Dank.
 
Schau nochmal in meinen Beitrag vpn 11:41... da steht genau, was du aufrufst und was deine Klasse Fruechte zur Verfügung stellt. Merkst du den Unterschied?

Java:
Fruechte banene = new Fruechte("Banene", 50);

und

Java:
class Fruechte{
    public Fruechte(String bananen, String orangen, String habichvergessen, int preis) {...}
}
Solltest du evtl. versuchen, optionale Parameter zu verwenden, also solche, die man auch weglassen kann, musst du das in JAVA durch Überladen deinen Konstruktors erledigen. In deinem Bsp. ist das aber vööööllog überzogener Quatsch.
 

Neue Themen


Zurück
Oben