Kein Zugriff auf Klassenmethoden in Main Methode

C.B.

Aktives Mitglied
Hallo,

ich habe drei Klassen erstellt. Kunde, Rechnungen und Rechnungsammlung. Leider kann ich in der Main Methode nicht auf die Methoden bestimmeGesamtBetragAllerRechnungen und findeTeuersteRechnung der Klasse Rechnungssammlung zugreifen.

Anbei mein Code der Klasse Kunde:

Java:
package RechnungKunde;

public class Kunde {

//Attribute

String name;

String adresse;

String rechnungsempfänger = name + adresse;


//Konstruktor

public Kunde(String name,String adresse) {

this.name = name;

this.adresse = adresse;

}

//Getter & Setter

public String getName() {

return name;

}
public void setName(String name) {

this.name = name;

}

public String getAdresse() {

return adresse;

}

public void setAdresse(String adresse) {

this.adresse = adresse;

}

public String getRechnungsempfänger() {

return rechnungsempfänger;

}


Code der Klasse Rechnung:

Java:
package RechnungKunde;
public class Rechnung {

//Attribute
Kunde rechnungsempfänger;
int betrag;
float rabatt = 0;
final float MwSt = .019f;
static int [I]rechnungsnummer[/I];
int meineRechnungsnummer;



//Konstruktor
public Rechnung() {
    this(0,0);
}

public Rechnung(float rabatt, int betrag) {
    this.rabatt = rabatt;
    this.betrag = betrag;
    this.meineRechnungsnummer = [I]rechnungsnummer[/I]++;
    }

public Rechnung(int betrag) {
    this.betrag = betrag;
    this.rabatt= 0;
    this.meineRechnungsnummer = [I]rechnungsnummer[/I]++;
}

//Getter & Setter
public int getBetrag() {
    return betrag;
}
public void setBetrag(int betrag) {
    this.betrag = betrag;
}
public float getRabatt() {
    return rabatt;
}
public void setRabatt(float rabatt) {
    this.rabatt = rabatt;
}
public static int getRechnungsnummer() {
    return [I]rechnungsnummer[/I];
}
public static void setRechnungsnummer(int rechnungsnummer) {
    Rechnung.[I]rechnungsnummer[/I] = rechnungsnummer;
}
public int getMeineRechnungsnummer() {
    return meineRechnungsnummer;
}
public void setMeineRechnungsnummer(int meineRechnungsnummer) {
    this.meineRechnungsnummer = meineRechnungsnummer;
}
public float getMwSt() {
    return MwSt;
}
public Kunde getRechnungsempfänger() {
    return rechnungsempfänger;
}
public void setRechnungsempfänger(Kunde rechnungsempfänger) {
    this.rechnungsempfänger = rechnungsempfänger;

}
}

Code Klasse Rechnungssammlung:

Java:
package RechnungKunde;

public class Rechnungssammlung {
public Rechnung [] rechnungen;
public Rechnungssammlung(Rechnung [] rechnungen) {
    this.rechnungen = rechnungen;
}
//Methoden
int bestimmeGesamtbetragAllerRechnungenVon (Kunde k){
    //wenn kein Kunde oder keine Rechnung vorhanden
    if(k==null || rechnungen == null) {
    return 0;
    }
    int betrag = 0;
    //alle Rechnungen betrachten
    for (Rechnung r: rechnungen) {
     // wenn gesuchter Kunde
    if(r.getRechnungsempfänger()==k) {
    //Betrag dazu addieren
    betrag = betrag + r.getBetrag();
    }
    }
    return betrag;
}

Rechnung findeTeuerersteRechnung() {
    if(rechnungen == null) {
    return null;
    }
    Rechnung max = null;
    //alle Rechnungen betrachten
    for (Rechnung r: rechnungen) {
    //wenn nich kein Maximum gefunden
    //oder aktuelle Rechnung teurer
    if(max == null || max.getBetrag()<r.getBetrag()) {
    //Maximum anpassen
    max = r;   
    }
    }
    return max;
}
}


Code meiner Main Methode:

Java:
package RechnungKunde;

public class Main {

    public static void main(String[] args) {

    // [B]TODO[/B] Auto-generated method stub

Rechnung rechnung1 = new Rechnung();
Rechnung rechnung2 = new Rechnung(2);
Rechnung rechnung3 = new Rechnung (1,0);
rechnung1.betrag = 12;

System.[B][I]out[/I][/B].println(rechnung1.getMeineRechnungsnummer());
System.[B][I]out[/I][/B].println(rechnung2.getMeineRechnungsnummer());
System.[B][I]out[/I][/B].println(rechnung3.getMeineRechnungsnummer());
System.[B][I]out[/I][/B].println(rechnung3.[I]getRechnungsnummer[/I]());
System.[B][I]out[/I][/B].println(Rechnung.[I]getRechnungsnummer[/I]());

Kunde Kunde1 = new Kunde ("Herbert Tisch", "Am Römling 3, 12445 Nowhere");
Kunde Kunde2 = new Kunde ("Markus Bauer", "Hinter der Grieb, q64748 Anywhere");
Kunde Kunde3 = new Kunde ("Johannes Kran", "Am Römling 66, 345454 Baum");
Kunde Kunde4 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");
rechnung1.setRechnungsempfänger(Kunde4);
rechnung3.setRechnungsempfänger(Kunde3);
rechnung2.setRechnungsempfänger(Kunde3);
Rechnung[] rechnungen = new Rechnung[10];
rechnungen [1]= rechnung1;
rechnungen [2]= rechnung2;
rechnungen [3]= rechnung3;
    }
}


Hier möchte ich nun auf die Methode findeTeueresteRechnung und bestimmeGesamtBetragallerRechnungen zugreifen aber es funktioniert nicht. Könnt ihr mir sagen was ich falsch mache?

Vielen Dank.
 
Zuletzt bearbeitet von einem Moderator:
Bitte die Code-Tags (das </> Symbol im Editor) verwenden, so kann man das schlecht lesen.

Was bedeutet "funktioniert nicht"?

Die Methode findeTeuersteRechnung() ist doch in der Klasse Rechnungssammlung. Dann brauchst du auch eine Instanz dieser Klasse, denn sie hat ja keine Klassenmethoden, sondern nur Instanzmethoden.
 
Vielen Dank für eure Antworten. Hab den Code nochmal eingefügt um ihn besser lesen zu können und hab ein Objekt Rechnungssammlung erstellt mit dem Namen "teuersteRechnung".
Ich würde nun gerne dem Array "teuersteRechnung" vom Typ Rechnungssammlung die zuvor erstellen Rechnungen rechnungen1, rechnungen2, rechnungen3 vom Typ Rechnung zuweisen. Ist das möglich?

Vielen Dank.

[CODE lang="java" title="Kunde"]package RechnungKunde;

public class Kunde {
//Attribute
String name;
String adresse;
String rechnungsempfänger = name + adresse;

//Konstruktor
public Kunde(String name,String adresse) {
this.name = name;
this.adresse = adresse;
}

//Getter & Setter
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAdresse() {
return adresse;
}

public void setAdresse(String adresse) {
this.adresse = adresse;
}

public String getRechnungsempfänger() {
return rechnungsempfänger;
}

}
[/CODE]

[CODE lang="java" title="Rechnung"]package RechnungKunde;

public class Rechnung {

//Attribute
Kunde rechnungsempfänger;
int betrag;
float rabatt = 0;
final float MwSt = .019f;
static int rechnungsnummer;
int meineRechnungsnummer;

//Konstruktor

public Rechnung() {
this(0,0);
}

public Rechnung(float rabatt, int betrag) {
this.rabatt = rabatt;
this.betrag = betrag;
this.meineRechnungsnummer = rechnungsnummer++;
}

public Rechnung(int betrag) {
this.betrag = betrag;
this.rabatt= 0;
this.meineRechnungsnummer = rechnungsnummer++;
}

//Getter & Setter
public int getBetrag() {
return betrag;
}

public void setBetrag(int betrag) {
this.betrag = betrag;
}

public float getRabatt() {
return rabatt;
}

public void setRabatt(float rabatt) {
this.rabatt = rabatt;
}

public static int getRechnungsnummer() {
return rechnungsnummer;
}

public static void setRechnungsnummer(int rechnungsnummer) {
Rechnung.rechnungsnummer = rechnungsnummer;
}

public int getMeineRechnungsnummer() {
return meineRechnungsnummer;
}

public void setMeineRechnungsnummer(int meineRechnungsnummer) {
this.meineRechnungsnummer = meineRechnungsnummer;
}

public float getMwSt() {
return MwSt;
}

public Kunde getRechnungsempfänger() {
return rechnungsempfänger;
}

public void setRechnungsempfänger(Kunde rechnungsempfänger) {
this.rechnungsempfänger = rechnungsempfänger;
}
}

[/CODE]

[CODE lang="java" title="Rechnungssammlung"]package RechnungKunde;

public class Rechnungssammlung {
public Rechnung [] rechnungen;

public Rechnungssammlung(Rechnung [] rechnungen) {
this.rechnungen = rechnungen;
}

//Methoden
int bestimmeGesamtbetragAllerRechnungenVon (Kunde k){
//wenn kein Kunde oder keine Rechnung vorhanden
if(k==null || rechnungen == null) {
return 0;
}
int betrag = 0;
//alle Rechnungen betrachten
for (Rechnung r: rechnungen) {
// wenn gesuchter Kunde
if(r.getRechnungsempfänger()==k) {
//Betrag dazu addieren
betrag = betrag + r.getBetrag();
}
}
return betrag;
}

Rechnung findeTeuerersteRechnung() {
if(rechnungen == null) {
return null;
}

Rechnung max = null;
//alle Rechnungen betrachten

for (Rechnung r: rechnungen) {
//wenn nich kein Maximum gefunden
//oder aktuelle Rechnung teurer
if(max == null || max.getBetrag()<r.getBetrag()) {
//Maximum anpassen
max = r;
}
}
return max;
}
}
[/CODE]


[CODE lang="java" title="Main Methode"]package RechnungKunde;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Rechnung rechnung1 = new Rechnung();
Rechnung rechnung2 = new Rechnung(2);
Rechnung rechnung3 = new Rechnung (1,0);

rechnung1.betrag = 12;



System.out.println(rechnung1.getMeineRechnungsnummer());
System.out.println(rechnung2.getMeineRechnungsnummer());
System.out.println(rechnung3.getMeineRechnungsnummer());
System.out.println(rechnung3.getRechnungsnummer());
System.out.println(Rechnung.getRechnungsnummer());

Kunde Kunde1 = new Kunde ("Herbert Tisch", "Am Römling 3, 12445 Nowhere");
Kunde Kunde2 = new Kunde ("Markus Bauer", "Hinter der Grieb, q64748 Anywhere");
Kunde Kunde3 = new Kunde ("Johannes Kran", "Am Römling 66, 345454 Baum");
Kunde Kunde4 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");

rechnung1.setRechnungsempfänger(Kunde4);
rechnung3.setRechnungsempfänger(Kunde3);
rechnung2.setRechnungsempfänger(Kunde3);

Rechnungssammlung[] teuersteRechnungen = new Rechnungssammlung [3];

}

}
[/CODE]
 
Ich würde nun gerne dem Array "teuersteRechnung" vom Typ Rechnungssammlung die zuvor erstellen Rechnungen rechnungen1, rechnungen2, rechnungen3 vom Typ Rechnung zuweisen. Ist das möglich?
Wäre es nicht sinnvoller die Rechnungen der Rechnungssammlung zuzuweisen? Die ist ja dafür gedacht und enthält auch ein passendes Array für Rechnungen. Bei der Erzeugung einer Instanz von Rechungssammlung kannst du die Rechnungen als Array dem Konstruktor übergeben.
 
Rechnungssammlung[] teuersteRechnungen = new Rechnungssammlung [3];

Damit rufst du für mich nicht den Konstruktor auf. erstellst kein Objekt von der Kasse.
Wieso brauchst du ein Array von der Klasse?
Das Array oder liste musst du ja dem Konstruktor mitgeben. Beim erstelln der Instaz
Das erstellen des Array“rechnungen“ in deinen ersten post war schon richtig.
Nur musst du das auch beim Objekterstellen mitgeben damit es der Konstruktor der Klasse auch speichern kann . Zur weiter Verarbeitung.

Java:
Rechnung[] rechnungen = new Rechnung[10];
rechnungen [1]= rechnung1;
rechnungen [2]= rechnung2;
rechnungen [3]= rechnung3;
Rechnungssammlung teuersteRechnungen = new Rechnungssammlung(rechnungen);

PS temi war schneller
 
Wäre es nicht sinnvoller die Rechnungen der Rechnungssammlung zuzuweisen? Die ist ja dafür gedacht und enthält auch ein passendes Array für Rechnungen. Bei der Erzeugung einer Instanz von Rechungssammlung kannst du die Rechnungen als Array dem Konstruktor übergeben.
Genau das würde ich gerne machen, hab mich falsch ausgedrückt. Bin wirklich absoluter Anfänger. Wie wäre dein Vorgehen? Ich weiß grad nicht wie ich es umsetzen soll. Vielen Dank.
 
Wie wäre dein Vorgehen?
So, wie es @Jw456 gezeigt hat. Erstelle ein Array zum Speichern der einzelnen Rechnungen und übergib das als Parameter an den Konstruktor von Rechnungssammlung.

Den Namen solltest du evtl. noch anpassen. Es sind ja nicht die teuersten Rechnungen, sondern alle Rechnungen. Ein Variablenname sollte sinnvoll sein und aussagen, welche Funktion (oder Inhalt) die Variable hat.
 
Eine Frage habe ich trotzdem noch, es funktioniert nun soweit alles. Nur bei dem Aufruf der Methode "findeTeuersteRechnung" erhalte ich keine Rechnung aus dem Array sondern die Ausgabe: "RechnungKunde.Rechnung@299a06ac".

Was muss ich ändern, damit mir eclipse eine Rechnung aus dem Array ausgibt?

[CODE lang="java" title="Main"]package RechnungKunde;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Rechnung rechnung0 = new Rechnung(10);
Rechnung rechnung1 = new Rechnung(2);
Rechnung rechnung2 = new Rechnung (9);
Rechnung rechnung3 = new Rechnung (13);
Rechnung rechnung4 = new Rechnung (14);
Rechnung rechnung5 = new Rechnung (16);
Rechnung rechnung6 = new Rechnung (20);
Rechnung rechnung7 = new Rechnung (21);
Rechnung rechnung8 = new Rechnung (50);
Rechnung rechnung9 = new Rechnung (4);


Kunde Kunde1 = new Kunde ("Herbert Tisch", "Am Römling 3, 12445 Nowhere");
Kunde Kunde2 = new Kunde ("Markus Bauer", "Hinter der Grieb, q64748 Anywhere");
Kunde Kunde3 = new Kunde ("Johannes Kran", "Am Römling 66, 345454 Baum");
Kunde Kunde4 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");


rechnung0.setRechnungsempfänger(Kunde4);
rechnung1.setRechnungsempfänger(Kunde3);
rechnung2.setRechnungsempfänger(Kunde3);
rechnung3.setRechnungsempfänger(Kunde3);
rechnung4.setRechnungsempfänger(Kunde2);
rechnung5.setRechnungsempfänger(Kunde3);
rechnung6.setRechnungsempfänger(Kunde1);
rechnung7.setRechnungsempfänger(Kunde3);
rechnung8.setRechnungsempfänger(Kunde1);
rechnung9.setRechnungsempfänger(Kunde1);


Rechnung[] rechnungen = new Rechnung[10];
rechnungen [0]= rechnung0;
rechnungen [1]= rechnung1;
rechnungen [2]= rechnung2;
rechnungen [3]= rechnung3;
rechnungen [4]= rechnung4;
rechnungen [5]= rechnung5;
rechnungen [6]= rechnung6;
rechnungen [7]= rechnung7;
rechnungen [8]= rechnung8;
rechnungen [9]= rechnung9;


Rechnungssammlung teuersteRechnungen = new Rechnungssammlung(rechnungen);

System.out.println(teuersteRechnungen.findeTeuerersteRechnung());
//System.out.println(teuersteRechnungen.bestimmeGesamtbetragAllerRechnungenVon (Kunde1));


//System.out.println(rechnung1.getMeineRechnungsnummer());
//System.out.println(rechnung2.getMeineRechnungsnummer());
//System.out.println(rechnung3.getMeineRechnungsnummer());
//System.out.println(rechnung3.getRechnungsnummer());
//System.out.println(Rechnung.getRechnungsnummer());


}

}
[/CODE]

[CODE lang="java" title="Rechnungssammlung"]package RechnungKunde;

public class Rechnungssammlung {
public Rechnung [] rechnungen;

public Rechnungssammlung(Rechnung [] rechnungen) {
this.rechnungen = rechnungen;
}

//Methoden
int bestimmeGesamtbetragAllerRechnungenVon (Kunde k){
//wenn kein Kunde oder keine Rechnung vorhanden
if(k==null || rechnungen == null) {
return 0;
}
int betrag = 0;
//alle Rechnungen betrachten
for (Rechnung r: rechnungen) {
// wenn gesuchter Kunde
if(r.getRechnungsempfänger()==k) {
//Betrag dazu addieren
betrag = betrag + r.getBetrag();
}
}
return betrag;
}

Rechnung findeTeuerersteRechnung() {
if(rechnungen == null) {
return null;
}

Rechnung max = null;
//alle Rechnungen betrachten

for (Rechnung r: rechnungen) {
//wenn nich kein Maximum gefunden
//oder aktuelle Rechnung teurer
if(max == null || max.getBetrag()<r.getBetrag()) {
//Maximum anpassen
max = r;
}
}
return max;
}
}
[/CODE]
[CODE lang="java" title="Rechnung"]package RechnungKunde;

public class Rechnung {

//Attribute
Kunde rechnungsempfänger;
int betrag;
float rabatt = 0;
final float MwSt = .019f;
static int rechnungsnummer;
int meineRechnungsnummer;

//Konstruktor

public Rechnung(int betrag, float rabatt) {
this.betrag = betrag;
this.rabatt = rabatt;
this.meineRechnungsnummer = rechnungsnummer++;
}

public Rechnung(int betrag) {
this.betrag = betrag;
this.rabatt= 0;
this.meineRechnungsnummer = rechnungsnummer++;
}

//Getter & Setter
public int getBetrag() {
return betrag;
}

public void setBetrag(int betrag) {
this.betrag = betrag;
}

public float getRabatt() {
return rabatt;
}

public void setRabatt(float rabatt) {
this.rabatt = rabatt;
}

public static int getRechnungsnummer() {
return rechnungsnummer;
}

public static void setRechnungsnummer(int rechnungsnummer) {
Rechnung.rechnungsnummer = rechnungsnummer;
}

public int getMeineRechnungsnummer() {
return meineRechnungsnummer;
}

public void setMeineRechnungsnummer(int meineRechnungsnummer) {
this.meineRechnungsnummer = meineRechnungsnummer;
}

public float getMwSt() {
return MwSt;
}

public Kunde getRechnungsempfänger() {
return rechnungsempfänger;
}

public void setRechnungsempfänger(Kunde rechnungsempfänger) {
this.rechnungsempfänger = rechnungsempfänger;
}
}

[/CODE]
[CODE lang="java" title="Kunde"]package RechnungKunde;

public class Kunde {
//Attribute
String name;
String adresse;
String rechnungsempfänger = name + adresse;

//Konstruktor
public Kunde(String name,String adresse) {
this.name = name;
this.adresse = adresse;
}

//Getter & Setter
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAdresse() {
return adresse;
}

public void setAdresse(String adresse) {
this.adresse = adresse;
}

public String getRechnungsempfänger() {
return rechnungsempfänger;
}




}
[/CODE]
 
Entweder du überschreibst die Methode toString() der Klasse Rechnung oder du greifst separat auf die Bestandteile von Rechnung zu, die du ausgeben möchtest, z. B. println("Rechnung " + rechnung.getRechnungsnummer() + ", Betrag: " + rechnung.getBetrag());

Die Ausgabe die du erhältst, kommt daher, dass du bei der Ausgabe als Parameter von println() die Instanz der Klasse Rechnung angegeben hast. Intern wird von println() die von Object geerbte Methode toString() aufgerufen. Die Standardimplementierung von Object gibt aber nur den Klassennamen und, ich glaube, einen Hashwert aus.

Kleiner Hinweis:
Java:
// anstatt

Rechnung rechnung0 = new Rechnung(10);
// ..
Kunde Kunde4 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");

rechnung0.setRechnungsempfänger(Kunde4);
// --
Rechnung[] rechnungen = new Rechnung[10];
rechnungen [0]= rechnung0;


// geht auch

Rechnung[] rechnungen = new Rechnung[10];
rechnungen [0]= new Rechnung(10);
// ..
Kunde kunde4 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");
rechnungen[0].setRechnungsempfänger(kunde4);

Und noch ein Hinweis: In Java beginnen Klassennamen mit einem Großbuchstaben und Variablen-/Methodennamen mit einem Kleinbuchstaben. In deinem Fall sollten Kunde1 - Kunde4 besser kunde1 - kunde4 benannt werden.
 
Zuletzt bearbeitet:
Wenn du das mit println ausgeben willst. Solltest du auch eine toString Methode neben den getter und setter in deine Klasse erstellen.

Misst wider zu langsam und sehr ausführlich
 
Wenn du das mit println ausgeben willst. Solltest du auch eine toString Methode neben den getter und setter in deine Klasse erstellen.
Wobei die Empfehlung ist, die toString() Methode so zu überschreiben, dass sie z. B. für Debuggingzwecke eine menschenlesbare Repräsentation der Klasse/Instanz zurückgibt. Die Ausgabe der Rechnungsdaten in Listen usw. erfolgt eher über die entsprechenden getter, denn unterschiedliche Ausgabezwecke erfordern i. d. R. auch unterschiedliche Informationen und Formate der Ausgabe und das kann toString() nicht leisten. Es gibt natürlich Ausnahmen, wo es u. U. reicht toString() zu überschreiben.
 
Das ist klar setze ich voraus das es eine override sein muß.
Er wollte ja erstmal die Rechnungs Nummer und die kann toString auch liefern.
 
Ich habe deinen Text erst so gelesen das du sagen wolltest er muss es überschreiben muss und nicht nur implementieren.

Er wollte ja erstmal die Rechnungs Nummer und die kann toString auch liefern. Eben als String und nicht als int was sie ja ist.

Danach kannte er es seiner main weiter verarbeiten.

Ansonsten wäre es wohl besser das die Methode gleich die Nummer zurück gibt und nicht das Objekt von der Rechnung.
 
Zuletzt bearbeitet:
Hallo,

hab in der Main Methode diese Methode implementiert:

System.out.println("Die höchste Rechnung hat die Nummer: " + höchsteRechnung.getMeineRechnungsnummer() + " und den Betrag: " + höchsteRechnung.getBetrag() + "und gehört dem Kunden: " + höchsteRechnung.getRechnungsempfänger());


Als Ergebnis erhalte ich:

"Die höchste Rechnung hat die Nummer: 8 und den Betrag: 50und gehört dem Kunden: RechnungKunde.Kunde@299a06ac"


d.h. höchsteRechnung.getRechnungsempfänger()); liefert "RechnungKunde.Kunde@299a06ac"

Was muss ich machen damit ich einen Namen erhalte und nicht diesen Ausdruck: RechnungKunde.Kunde@299a06ac"?

Wie würde es funktionieren wenn ich die toString Methode überschreibe?

Hier nochmal das komplette Programm:

[CODE lang="java" title="Kunde"]package RechnungKunde;

public class Kunde {
//Attribute
String name;
String adresse;
String rechnungsempfänger = name + adresse;

//Konstruktor
public Kunde(String name,String adresse) {
this.name = name;
this.adresse = adresse;
}

//Getter & Setter
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAdresse() {
return adresse;
}

public void setAdresse(String adresse) {
this.adresse = adresse;
}

public String getRechnungsempfänger() {
return rechnungsempfänger;
}

}
[/CODE]

[CODE lang="java" title="Rechnung"]package RechnungKunde;

public class Rechnung {

//Attribute
Kunde rechnungsempfänger;
int betrag;
float rabatt = 0;
final float MwSt = .019f;
static int rechnungsnummer;
int meineRechnungsnummer;
Rechnungssammlung höchsteRechnung;

//Konstruktor

public Rechnung(int betrag, float rabatt) {
this.betrag = betrag;
this.rabatt = rabatt;
this.meineRechnungsnummer = rechnungsnummer++;
}

public Rechnung(int betrag) {
this.betrag = betrag;
this.rabatt= 0;
this.meineRechnungsnummer = rechnungsnummer++;
}

//Getter & Setter
public int getBetrag() {
return betrag;
}

public void setBetrag(int betrag) {
this.betrag = betrag;
}

public float getRabatt() {
return rabatt;
}

public void setRabatt(float rabatt) {
this.rabatt = rabatt;
}

public static int getRechnungsnummer() {
return rechnungsnummer;
}

public static void setRechnungsnummer(int rechnungsnummer) {
Rechnung.rechnungsnummer = rechnungsnummer;
}

public int getMeineRechnungsnummer() {
return meineRechnungsnummer;
}

public void setMeineRechnungsnummer(int meineRechnungsnummer) {
this.meineRechnungsnummer = meineRechnungsnummer;
}

public float getMwSt() {
return MwSt;
}

public Kunde getRechnungsempfänger() {
return rechnungsempfänger;
}

public void setRechnungsempfänger(Kunde rechnungsempfänger) {
this.rechnungsempfänger = rechnungsempfänger;
}


}

[/CODE]

[CODE lang="java" title="Rechnungssammlung"]package RechnungKunde;

public class Rechnungssammlung {

//Attribute
public Rechnung [] rechnungen;


//Konstruktor
public Rechnungssammlung(Rechnung [] rechnungen) {
this.rechnungen = rechnungen;
}

//Methoden
int bestimmeGesamtbetragAllerRechnungenVon (Kunde k){
//wenn kein Kunde oder keine Rechnung vorhanden
if(k==null || rechnungen == null) {
return 0;
}
int betrag = 0;
//alle Rechnungen betrachten
for (Rechnung r: rechnungen) {
// wenn gesuchter Kunde
if(r.getRechnungsempfänger()==k) {
//Betrag dazu addieren
betrag = betrag + r.getBetrag();
}
}
return betrag;
}

Rechnung findeTeuerersteRechnung() {

if(rechnungen == null) {
return null;
}

Rechnung max = null;
//alle Rechnungen betrachten

for (Rechnung r: rechnungen) {
//wenn nich kein Maximum gefunden
//oder aktuelle Rechnung teurer
if(max == null || max.getBetrag()<r.getBetrag()) {
//Maximum anpassen
max = r;
}
}
return max;
}


}[/CODE]

[CODE lang="java" title="Main Methode"]package RechnungKunde;

public class Main {


public static void main(String[] args) {
// TODO Auto-generated method stub
Rechnung rechnung0 = new Rechnung(10);
Rechnung rechnung1 = new Rechnung(2);
Rechnung rechnung2 = new Rechnung (9);
Rechnung rechnung3 = new Rechnung (13);
Rechnung rechnung4 = new Rechnung (14);
Rechnung rechnung5 = new Rechnung (16);
Rechnung rechnung6 = new Rechnung (20);
Rechnung rechnung7 = new Rechnung (21);
Rechnung rechnung8 = new Rechnung (50);
Rechnung rechnung9 = new Rechnung (4);


Kunde kunde0 = new Kunde ("Herbert Tisch", "Am Römling 3, 12445 Nowhere");
Kunde kunde1 = new Kunde ("Markus Bauer", "Hinter der Grieb, q64748 Anywhere");
Kunde kunde2 = new Kunde ("Johannes Kran", "Am Römling 66, 345454 Baum");
Kunde kunde3 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");
Kunde kunde4 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");
Kunde kunde5 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");
Kunde kunde6 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");
Kunde kunde7 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");
Kunde kunde8 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");
Kunde kunde9 = new Kunde ("Thomas Fuchs", "Am Ostentor 3, 97749 Stadt");


rechnung0.setRechnungsempfänger(kunde0);
rechnung1.setRechnungsempfänger(kunde1);
rechnung2.setRechnungsempfänger(kunde2);
rechnung3.setRechnungsempfänger(kunde3);
rechnung4.setRechnungsempfänger(kunde4);
rechnung5.setRechnungsempfänger(kunde5);
rechnung6.setRechnungsempfänger(kunde6);
rechnung7.setRechnungsempfänger(kunde7);
rechnung8.setRechnungsempfänger(kunde8);
rechnung9.setRechnungsempfänger(kunde9);


Rechnung[] rechnungen = new Rechnung[10];
rechnungen [0]= rechnung0;
rechnungen [1]= rechnung1;
rechnungen [2]= rechnung2;
rechnungen [3]= rechnung3;
rechnungen [4]= rechnung4;
rechnungen [5]= rechnung5;
rechnungen [6]= rechnung6;
rechnungen [7]= rechnung7;
rechnungen [8]= rechnung8;
rechnungen [9]= rechnung9;


Rechnungssammlung teuersteRechnungen = new Rechnungssammlung(rechnungen);

Rechnung höchsteRechnung = teuersteRechnungen.findeTeuerersteRechnung();
System.out.println(teuersteRechnungen.bestimmeGesamtbetragAllerRechnungenVon (kunde0));

//System.out.println(rechnung1.getMeineRechnungsnummer());
//System.out.println(rechnung2.getMeineRechnungsnummer());
//System.out.println(rechnung3.getMeineRechnungsnummer());
//System.out.println(rechnung3.getRechnungsnummer());
//System.out.println(Rechnung.getRechnungsnummer());

System.out.println("Die höchste Rechnung hat die Nummer: " + höchsteRechnung.getMeineRechnungsnummer() + " und den Betrag: " + höchsteRechnung.getBetrag() + "und gehört dem Kunden: " + höchsteRechnung.getRechnungsempfänger());
}
}[/CODE]
 
Wenn eine Instanz ausgegeben wird, dann wird die Methode toString() auf der Instanz aufgrufen.
toString() von Object gibt aus: <klassenname>@<hashcode> wobei bei den derzeit bekannten Implementationen der hashcode die Speicheradresse vom Objekt ist.

Die Lösung kann also sein:
a) toString() in Kunde überschreiben
b) Statt die Instanz gezielt ein oder mehrere Attribute ausgeben.
 
Wenn eine Instanz ausgegeben wird, dann wird die Methode toString() auf der Instanz aufgrufen.
toString() von Object gibt aus: <klassenname>@<hashcode> wobei bei den derzeit bekannten Implementationen der hashcode die Speicheradresse vom Objekt ist.

Die Lösung kann also sein:
a) toString() in Kunde überschreiben
b) Statt die Instanz gezielt ein oder mehrere Attribute ausgeben.
Vielen Dank. Ich weiß nur leider nicht wie ich a und b umsetzen soll. Könnten Sie mir hier noch weiterhelfen?
 
Vielen Dank. Ich weiß nur leider nicht wie ich a und b umsetzen soll. Könnten Sie mir hier noch weiterhelfen?
Du musst immer auch beachten, was der Typ des Rückgabewerts einer Methode ist.

Die Methode rechnung.getBetrag() gibt bspw. einen int-Wert zurück, den du ausgeben kannst.

Die Methode rechnung.getRechnungsempfänger() hat als Rückgabetyp einen Kunden. Jetzt kannst du abhängig vom entsprechenden Typen schauen, ob es für diesen weitere Zugriffsmethode gibt, wie in deinem Fall getName().
 

Neue Themen


Zurück
Oben