Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
// Konstruktor
public Kunde(int nr) {
this.nr = nr;
//neue Klasse
public class Rechnungserstellung {
//Attribut
Kunde [] arr = {};
//Methode
int summeBerechnung() {
int sum = 0;
for(int i = 0; i<arr.length; i++) {
sum += arr // Fehlermeldung Operator '+' cannot be applied to 'int', 'Kunde'
Bitte nutze doch den Codeblock (das "</>" Symbol im Editor), um Code zu schreiben...
Ich nehme mal an, dein Code sollte so aussehen:
Java:
int summe = 0;
int[] temp = {2,5,7,9,10};
for (int i = 0; i < 5; i++) {
summe += temp[i];
}
Warum das nun geht?
Naja,... weil du jetzt ja zwei int miteinander addierst.
Der += Operator ist ja nichts anderes im obigen Fall, als:
Java:
summe = summe + temp[i];
Und summe + temp[i] ist vom Typ her ein int, weil sowohl summe als auch temp[i] jeweils int sind. temp selbst ist vom Typ int[] (also Array of int), aber durch den Indexierungsoperator (also dem [i]) adressierst du ja einen einzelnen int aus dem Array. Und dann hast du halt einen int.
Zur Ergänzung evtl. noch:
Generell ist klar festgelegt worden, was mit dem + Operator gemacht werden kann. So ist in der Java Language Specification klar aufgeführt, von welchem Typ die Operanden sein dürfen und was dann das Ergebnis ist.
Beispiele wären hier z.B. 5 + 7 = 13 -> Wenn beide Operanden ein int sind, dann kommt auch ein int heraus.
Komplizierter wird es mit 1.0 + 2 = 3.0 -> Ein Operand ist ein double. Der zweite Operand ist ein int. Da wird dann der int zu einem double gemacht und das Ergebnis ist ein double.
Und noch komplizierter wird es mit etwas wie "Ergebnis := " + 42
Das wird aber auch im Detail beschrieben - die Zahl wird zu einer Instanz einer Klasse und da wird dann toString aufgerufen. Also etwas wie
"Ergebnis := " + new Integer(42).toString()
So kann man alle Regeln durchgehen. Diese sollte man auch kennen und daher kann ich nur empfehlen, diese in einem Lehrbuch oder Tutorial anzusehen und damit zu spielen. Das ist halt wichtig, wenn es um Berechnungen geht - um dann zu verstehen, was 7 / 3 und 7.0 / 3 jeweils bedeuten. (So kompliziert ist es nicht!).
Aber nun zu dem Code von Dir:
Nun ist es generell so: Die Addition von einem int und einem Array ist generell nicht definiert. Das lässt sich nie addieren! Da ist der Typ, der in dem Array gespeichert wurde, egal. Addition einer Referenz geht nur mit einem String - also "" + someReference oder someReference + "".
Aber Du addierst (hoffentlich) nicht mit einem Array! Das erkennt man bei Dir nur sehr schlecht, denn das [i] in Deinem Text hat das Forum als Anweisung verstanden, ab da den Text kursiv darzustellen. Bei den [ ] handelt es sich um einen Array Operator. Du hast also auf das Array erst diesen Array Operator angewendet. Und das Ergebnis, das wurde dann addiert. Das Ergebnis ist also vom Typ, der in dem Array gespeichert wurde.
Das wird evtl. deutlicher, wenn man diese zwei Operationen trennt:
Java:
Kunde[] arr;
arr = ..... ; // Wird natürlich irgendwie initialisiert
int i = ....; // für den Zugriff brauchen wir den index, auf den wir zugreifen wollen
int sum = ..; // Ein sum gab es auch
// sum += arr[i]; aufgeteilt ist nun:
Kunde temp = arr[i];
sum += temp; // ist ja sum = sum + temp; und sum ist int, temp ist Kunde, int + Kunde geht nicht
Mit dem int Array sieht es dann so aus:
Code:
int[] arr;
arr = ..... ; // Wird natürlich irgendwie initialisiert
int i = ....; // für den Zugriff brauchen wir den index, auf den wir zugreifen wollen
int sum = ..; // Ein sum gab es auch
// sum += arr[i]; aufgeteilt ist nun:
int temp = arr[i];
sum += temp; // ist ja sum = sum + temp; und sum ist int, temp ist int, int + int geht und gibt ein int!
Das hilft evtl., die Verwirrungen um das Array zu verstehen.
Zur Ergänzung evtl. noch:
Generell ist klar festgelegt worden, was mit dem + Operator gemacht werden kann. So ist in der Java Language Specification klar aufgeführt, von welchem Typ die Operanden sein dürfen und was dann das Ergebnis ist.
Beispiele wären hier z.B. 5 + 7 = 13 -> Wenn beide Operanden ein int sind, dann kommt auch ein int heraus.
Komplizierter wird es mit 1.0 + 2 = 3.0 -> Ein Operand ist ein double. Der zweite Operand ist ein int. Da wird dann der int zu einem double gemacht und das Ergebnis ist ein double.
Und noch komplizierter wird es mit etwas wie "Ergebnis := " + 42
Das wird aber auch im Detail beschrieben - die Zahl wird zu einer Instanz einer Klasse und da wird dann toString aufgerufen. Also etwas wie
"Ergebnis := " + new Integer(42).toString()
So kann man alle Regeln durchgehen. Diese sollte man auch kennen und daher kann ich nur empfehlen, diese in einem Lehrbuch oder Tutorial anzusehen und damit zu spielen. Das ist halt wichtig, wenn es um Berechnungen geht - um dann zu verstehen, was 7 / 3 und 7.0 / 3 jeweils bedeuten. (So kompliziert ist es nicht!).
Aber nun zu dem Code von Dir:
Nun ist es generell so: Die Addition von einem int und einem Array ist generell nicht definiert. Das lässt sich nie addieren! Da ist der Typ, der in dem Array gespeichert wurde, egal. Addition einer Referenz geht nur mit einem String - also "" + someReference oder someReference + "".
Aber Du addierst (hoffentlich) nicht mit einem Array! Das erkennt man bei Dir nur sehr schlecht, denn das [i] in Deinem Text hat das Forum als Anweisung verstanden, ab da den Text kursiv darzustellen. Bei den [ ] handelt es sich um einen Array Operator. Du hast also auf das Array erst diesen Array Operator angewendet. Und das Ergebnis, das wurde dann addiert. Das Ergebnis ist also vom Typ, der in dem Array gespeichert wurde.
Das wird evtl. deutlicher, wenn man diese zwei Operationen trennt:
Java:
Kunde[] arr;
arr = ..... ; // Wird natürlich irgendwie initialisiert
int i = ....; // für den Zugriff brauchen wir den index, auf den wir zugreifen wollen
int sum = ..; // Ein sum gab es auch
// sum += arr[i]; aufgeteilt ist nun:
Kunde temp = arr[i];
sum += temp; // ist ja sum = sum + temp; und sum ist int, temp ist Kunde, int + Kunde geht nicht
Mit dem int Array sieht es dann so aus:
Code:
int[] arr;
arr = ..... ; // Wird natürlich irgendwie initialisiert
int i = ....; // für den Zugriff brauchen wir den index, auf den wir zugreifen wollen
int sum = ..; // Ein sum gab es auch
// sum += arr[i]; aufgeteilt ist nun:
int temp = arr[i];
sum += temp; // ist ja sum = sum + temp; und sum ist int, temp ist int, int + int geht und gibt ein int!
Das hilft evtl., die Verwirrungen um das Array zu verstehen.
int temp = arr bedeutet- temp übernimmt den Inhalt von temp/ ohne cast bleibt es aber ein int?
Kunde temp = arr; bedeutet- temp wird zu einem Array/ ohne cast ist dies möglich/Kunde ist ein Objekt mit int Wert?
Nur wie kann ich nun mit meinem class Array rechnen?
Also int temp = arr[i] bedeutet mehreres:
a) Es wird eine neue (hier lokale) Variable temp deklariert vom Typ int.
b) Es wird evaluiert: das Element mit index i vom Array arr wird genommen. Und dieses Ergebnis wird temp zugewiesen.
Das Element i vom Array arr ist bei int[] arr ein int. Bei Kunde[] arr wäre es vom Typ Kunde.
Edit: Noch einmal überarbeitet ... er hat mit aus `i ein ì gemacht
Gar nicht.
Wie @KonradN schon sagte, kann man in Java nur numerische Werte (oder Strings) addieren. Nicht beliebige Klassen.
Und die Frage, die dir @KonradN quasi auch schon gestellt hat: Was soll denn passieren, wenn du zwei Objekte deiner Klasse miteinander oder mit einem int addierst?
Was soll das Ergebnis sein?
int temp = arr bedeutet- temp übernimmt den Inhalt von temp/ ohne cast bleibt es aber ein int?
Kunde temp = arr; bedeutet- temp wird zu einem Array/ ohne cast ist dies möglich/Kunde ist ein Objekt mit int Wert?
Nur wie kann ich nun mit meinem class Array rechnen?
public class Kunde {
// ...
}
public class Rechnung {
private Kunde rechnungsempfänger;
}
public Kunde liefereRechnungsempfaenger(){
return this.rechnungsempfaenger;
}
public int bestimmeBetragInCent(){}
}
public class Rechnungssammlung{
private Rechnung[] rechnungen;
}
Die Aufgabe ist: implementieren Sie eine Methode int bestimmeGesamtbetragAllerRechnungenVon (Kunde k)
Nein. Du "addierst" hier keinen int Wert mit einem Array.
Du addierst hier wiederholt einen int Wert zu einem anderen int Wert hinzu.
Und du nutzt eine Schleife als Kontrollstruktur, um über alle Elemente in einem Array zu iterieren.
Aber die "Additionen" passieren hier nicht auf einem Array, sondern auf int Werten pro jeweils einem Element in dem Array (und dessen bestimmeBetragInCent().
int betrag = 0;
for(Rechnung r : rechnungen)
if(r.liefereRechnungsempfaenger() == k)
// Betrag dazu addieren
betrag += r.bestimmeBetragInCent();
}
}
return betrag;[/CODE] Darum gehe ich davon aus, dass ein int Wert mit dem Array rechnungen addiert wird.
Wo steht denn hier, dass einem Array was dazuaddiert wird?
Ich sehe da eine Variable namens "betrag", der etwas hinzuaddiert wird, nämlich das ergebnis von r.bestimmeBetragInCent().
Auch "r" ist kein Array, sondern eine in dem Array gespeicherte Rechnung.
Was du hier hast, ist eine for-each-Schleife.
Der Code in Worten ausgedrückt, ist ungefähr dieser
Code:
int Summe = 0; //Taschenrechner einschalten
//Gehe alle Rechnungen durch
Für jede Rechnung auf dem Stapel Rechnungen mach folgendes: {
Falls die Rechnung auf Kunde XY ausgestellt ist ... {
... dann addiere den Rechnungsbetrag zur Summe hinzu.
//von der Rechnung den Centbetrag ablesen und im Taschenrechner + ... eintippen
}
}
Wo steht denn hier, dass einem Array was dazuaddiert wird?
Ich sehe da eine Variable namens "betrag", der etwas hinzuaddiert wird, nämlich das ergebnis von r.bestimmeBetragInCent().
Auch "r" ist kein Array, sondern eine in dem Array gespeicherte Rechnung.
Was du hier hast, ist eine for-each-Schleife.
Der Code in Worten ausgedrückt, ist ungefähr dieser
Code:
int Summe = 0; //Taschenrechner einschalten
//Gehe alle Rechnungen durch
Für jede Rechnung auf dem Stapel Rechnungen mach folgendes: {
Falls die Rechnung auf Kunde XY ausgestellt ist ... {
... dann addiere den Rechnungsbetrag zur Summe hinzu.
//von der Rechnung den Centbetrag ablesen und im Taschenrechner + ... eintippen
}
}
Probier erst mal Schritt für Schritt auszuformulieren, was du eigentlich willst, ohne das Wort Array zu verwenden. Wenn du das geschafft hast, dann kannst du mit dem Programmieren anfangen.