Autohaus

Meine Glaskugel funktioniert gerade nicht. Poste mal den aktuellen Code.
 
#public class Kunde {

# final Autohaus autohaus;

# public Kunde(final Autohaus autohaus) {
# this.autohaus = autohaus;
# }

# public void angeboteAnzeigen() {
# System.out.println(autohaus);
# }
#}
 
Wo sind die Code-Tags? Was sollen die #?
Die Klasse sieht soweit OK aus. das Problem liegt in autohaus.toString().
 
cpuman990 schrieb:
ok, ich verstehe gerade gar nichts mehr :D. Wie muss ich das dort reinschreiben. Ein Autohaus-objekt erstellen ?
Ergänzung ()

Ah, autohaus1 erstellen und das dann eintippen ? :D

Genau.

Ergänzung ()

Wenn ich jetzt die Methode des Kunden aufrufe dann erhalte ich wieder etwas wie: @xxjjeie
Ergänzung ()

Was muss noch an der Methode verändert werden ?

Welche Methode rufst du denn auf? Wenn du von printCurrentOffers sprichst hast du eventuell vergessen den dritten codeblock aus #51 in die Autohaus Klasse zu übernehmen?

EDIT:
Code Einbettungen macht man über \[code\]<...>\[\/code\].

Das System.out.println() nicht automatisch die toString Methode aufruft irritiert mich gerade, in einem kurzen Test funktioniert das.
 
Zuletzt bearbeitet:
# ist das Symbol, dass du hier im Editor siehst. Drück mal unten links auf Antworten.
 
cpuman990 schrieb:
Waren nicht # die code tags ? Also liegt das Problem im Autohaus ?

Es könnte sein, dass du dich im Namen der Autohaus.toString Methode verschrieben hast.
 
Ok , danke
ich habe den 3 Quellcode noch hinzugefügt.
Was muss bei String result in die Anführungszeichen, weil jetzt erhalte ich ein Nullpointerexception
Ergänzung ()

und trotzdem immer noch @dkflsf
 
Siehe #55, zweiter Absatz.
 
Ah. Die NullpointerException fliegt vermutlich weil das autohaus nicht voll ist, mein Fehler (das wäre ein weiterer Vorteil einer Liste).
Du musst also beim iterieren testen ob das aktuelle Element null ist, oder die Schleife umschreiben sodass sie nur bis zu denem i iteriert.
Code:
public String toString() {
  String result = "";
  for(Auto auto : pkwGarage) {
    if (auto != null) {
      result += auto.toString() + "\n";
    }
  }
  return result;
}
 
Zuletzt bearbeitet: (Alternative hinzugefügt)
ok Danke! Jetzt muss ich die quellcodes aber Noch verstehen :D.

Code:
public class Kunde {
final Autohaus autohaus;
 
  public Kunde(final Autohaus autohaus) {
    this.autohaus = autohaus;
  }
 
  public void angeboteAnzeigen() {
    System.out.println(autohaus);
  }
}
Was ist final , wie geht es, dass diese Methode ohne Objekt funktioniert, bzw. mit einem Objekt, das erst noch erstellt wird ?
Code:
      public String toString() {
  String result = "";
  for(Auto auto : pkwgarage) {
    if (auto != null) {
      result += auto.toString() + "\n";
    }
  }
  return result;
}
Was steht zwischen den "" und was ist hier for ( ja keine wiederholung mit fester Anzahl)
Und wäre es noch möglich meine Methode autoAusgeben:
Code:
 public  void  autoAusgeben(){
          if(j==i){System.out.println(pkwgarage[j]);}
           for(j = 0; j<i;j++){
               System.out.println(pkwgarage[j].toString());
            }
Könnte ich diese irgendwie in Kunde referenzieren, ohne ein Objekt zu erstellen mit new.
Ergänzung ()

oder könnte ich vielleicht die Methode autoAusgeben in Kunde schreiben ?
Ergänzung ()

Das Problem ist, dass die Quellcodes einfach zu weit entfernt sind :D:D
 
Also der Reihe nach:

final bezeichnet Werte, die im Nachhinein nicht mehr veränderbar sind. Sie sind also final.

Code:
public Kunde(final Autohaus autohaus){
    this.autohaus = autohaus;
}
Das ist dein Konstruktor. Hier übergibst du beim erstellen eines neuen Kunden-Objektes ein Autohaus.

Code:
  public void angeboteAnzeigen() {
    System.out.println(autohaus);
  }
Alle Methoden in dieser Klasse können mit jedem erstellen Objekt aufgerufen werden. Hast du also einen neuen Kunden erstellt, kann dieser nach außen hin auf alle public-Methoden der Kunde-Klasse zugreifen. Das autohaus in den Klammern des System.out.println(); hast du im Konstruktor übergeben.

Code:
public String toString() {
  String result = "";
  for(Auto auto : pkwgarage) {
    if (auto != null) {
      result += auto.toString() + "\n";
    }
  }
  return result;
}
Die leeren Anführungzeichen weisen einfach auf einen leeren String hin. Wenn du einen neuen String erstellst, musst du auch einen Inhalt für diesen angeben. Hier wird result erstellt, der erstmal leer, also "" sein soll. Es ist ganz dir überlassen, was du in die Anführungszeichen reinschreibst.

for ist eine Schleife. for each beschreibt es besser. Diese Schleife nimmt sich jedes Auto-Objekt des Arrays pkwgarage und führt damit den Code aus, der im Body der for-Schleife steht.
 
Zuletzt bearbeitet:
cpuman990 schrieb:
ok Danke! Jetzt muss ich die quellcodes aber Noch verstehen :D.

Code:
...
Was ist final , wie geht es, dass diese Methode ohne Objekt funktioniert, bzw. mit einem Objekt, das erst noch erstellt wird ?
final ist ein modifier der verhindert, dass dieses Feld geändert wird wenn es einmal gesetzt ist. Es ist guter Stil das überall zu verwenden wo es möglich ist, dadurch verhindert man Fehler bei denen Felder fälschlicherweise gesetzt werden. Man muss sich bei jedem Feld gedanken machen: "Macht es Sinn, das der Wert später ein anderer ist?".

Code:
...
Was steht zwischen den "" und was ist hier for ( ja keine wiederholung mit fester Anzahl)
Welche Anführungszeichen meinst du? Die ersten sind leer, das erstellt dir nur den empty String sodass man später weitere Teile anhängen kann. Das "\n" ist ein newline Symbol. Das sorgt dafür, dass bei der Ausgabe später eine neue Zeile anfängt.
Die for-Schleife ist eine sogenannte foreach Schleife. Die ist universaler einsetzbar und erlaubt weniger Fehler, wie zum Beispiel dass man über die Arraygrenzen wegiteriert. Die gleiche Schleife könntest du auch benutzen wenn du eine andere Datenstruktur verwendest, zum Beispiel Set, List.

Und wäre es noch möglich meine Methode autoAusgeben:
Code:
...
Könnte ich diese irgendwie in Kunde referenzieren, ohne ein Objekt zu erstellen mit new.
Ergänzung ()

oder könnte ich vielleicht die Methode autoAusgeben in Kunde schreiben ?
Ergänzung ()

Das Problem ist, dass die Quellcodes einfach zu weit entfernt sind :D:D

Ich verstehe nicht ganz was du meinst. Diese Methode entspricht doch der angeboteAnzeigen Methode oder nicht?

EDIT: Fabiansen hat es besser erklärt mMn. Zu "[...] wie geht es, dass diese Methode ohne Objekt funktioniert, bzw. mit einem Objekt, das erst noch erstellt wird ?":
Jede Funktion wird definiert ohne dass die dazugehörigen Daten existiert. Wenn ich eine Methode int summe(int x, int y) schreibe weiß ich ja auch nicht welche Werte x und y haben, ich kenne nur ihren Typ. Analog funktioniert das im Kunde-Konstruktor, ich weiß dass ein Autohaus übergeben wird, was das für ein Autohaus ist weiß ich erstmal nicht.
 
Zuletzt bearbeitet:
ok, jetzt wird es verständlicher. Es gibt also definitiv keine möglichkeit für autoausgeben ?
 
Was meinst du mit "keine Möglichkeit für autoAusgeben"?
 
Nein. Wie schon mehrfach geschrieben, ist das referenzieren von Methoden nicht möglich. Du kannst die Methode aber aufrufen. Wie man Methoden von Objekten aufruft, weist du?
 
Ich glaube hier gibt es ein Missverständnis. Was meinst du mit referenzieren? Außerdem ist es hilfreicher wenn du beschreibst welche Funktionalität du gerne hättest, die es aktuell nicht gibt.
 
Ja ich wollte diese Methode quasi in Kunde aufrufen. Dies geht aber nicht, da hierfür erst ein Objekt erzeugt werden muss oder ?
 
Richtig.
 
Zurück
Oben