| 

.NET C# Java Javascript Exception

3
Servus zusammen,

ich war gerade dabei etwas zu erklären und da bin ich selber über etwas gestolpert...
In Klasse Waschanlage ist der Parameter ja nur ein Platzhalter für „this“ indem die Anfangsadresse
steht...sagen wir mal von der Objektvariablen Audi, BMW oder oder...
liegt daran wer gerade aufgerufen wurde...
Da ich jetzt mehrere Objekte von der Klasse erzeugt/instanziiert habe... wollte ich dann noch den Namen des Auto niederschreiben welches gerade gewaschen wird...
Nur wenn ich fahrzeug.equals(Audi) aufrufen möchte funktioniert das ganze nicht...
Obwohl die Adressen dann bei beiden identisch ist...
Denn ich übergebe ja in dem Fall die Anfangsadresse von dem Objekt direkt an den Platzhalter fahrzeug...So sollte das Audi sein würde diese Anfangsadresse direkt an fahrzeug übergeben und auch der Vergleich Audi und fahrzeug wäre dann identisch...
Aber höchstwahrscheinlich habe ich einen Denkfehler...

********************************** Main Funktion ****************************
public class ThisKeyWord {

public static void main(String[] args) {

Kraftfahrzeug Audi = new Kraftfahrzeug(225,"Audi",8, 250);
Kraftfahrzeug BMW = new Kraftfahrzeug(198,"BMW", 9, 320);
Kraftfahrzeug VW = Audi;

//WaschAnlage waschanlage = new WaschAnlage();
//waschanlage.fahrzeugWaschen(Audi);
Audi.waschen();
BMW.waschen();
VW.waschen();


//Anfangsadresse der einzelnen Objekte...
System.out.println(Audi);
System.out.println(BMW);
System.out.println(VW);

// Ausgabe der PS der einzelnen Fahrzeuge...
System.out.println(VW.getPs());
System.out.println(BMW.getPs());
System.out.println(Audi.getPs());

// Ausgabe der PS der einzelnen Fahrzeuge...
System.out.println(VW.getHersteller());
System.out.println(BMW.getHersteller());
System.out.println(Audi.getHersteller());

// Ausgabe der PS der einzelnen Fahrzeuge...
System.out.println(VW.getVerbrauch());
System.out.println(BMW.getVerbrauch());
System.out.println(Audi.getVerbrauch());

// Ausgabe der PS der einzelnen Fahrzeuge...
System.out.println(VW.getGeschwindigkeit());
System.out.println(BMW.getGeschwindigkeit());
System.out.println(Audi.getGeschwindigkeit());

System.out.println(Audi.getMe());
System.out.println(Audi);
System.out.println(BMW.getMe());
System.out.println(BMW);
System.out.println(VW.getMe());
System.out.println(VW);

}

}

********************************** Klasse Kraftfahrzeug ****************************
public class Kraftfahrzeug {

// Attribute
private int ps;
private String hersteller;
private int verbrauch;
private int geschwindigkeit;


public Kraftfahrzeug(int ps, String hersteller, int verbrauch, int geschwindigkeit) {
this.ps = ps;
this.setHersteller(hersteller);
this.verbrauch = verbrauch;
this.geschwindigkeit = geschwindigkeit;
}

// Methoden
public void waschen() {

WaschAnlage waschanlage = new WaschAnlage();

waschanlage.fahrzeugWaschen(this);
}

public Kraftfahrzeug getMe() {
return this;
}

public int getPs() {
return ps;
}
public void setPs(int ps) {
this.ps = ps;
}

public String getHersteller() {
return hersteller;
}

public void setHersteller(String hersteller) {
this.hersteller = hersteller;
}

public int getVerbrauch() {
return verbrauch;
}

public void setVerbrauch(int verbrauch) {
this.verbrauch = verbrauch;
}

public int getGeschwindigkeit() {
return geschwindigkeit;
}

public void setGeschwindigkeit(int geschwindigkeit) {
this.geschwindigkeit = geschwindigkeit;
}


}

********************************** Klasse Waschanlage ****************************
public class WaschAnlage {

public void fahrzeugWaschen(Kraftfahrzeug fahrzeug) {
if (fahrzeug.equals(Audi)) {
System.out.println("Methoden Aufruf Audi wird gewaschen!!!!");
System.out.println(fahrzeug);
}
if (fahrzeug.equals(BMW)) {
System.out.println("Methoden Aufruf BMW wird gewaschen!!!!");
System.out.println(fahrzeug);
}
}

}

Vielen Dank im voraus für eure Unterstützung...

Snowleopard
News:
10.06.2019
3 Antworten
0
equals() prüft nur die Objektidentität, indem es die Adressen, an denen die zu vergleichenden Objekte gespeichert wurden, vergleicht. Um dein Problem zu lösen, musst du in der Klasse Fahrzeug die Methoden equals() und getHashcode() selbst implementieren. Hier findest du ein Tutorial, welches die Vorgehensweise beschreibt. Ansonsten kannst du auch mit den Stichworten "java override equals gethashcode" googlen.
11.06.2019
luedi 2,2k 1 9
0
Servus luedi

erstmal Danke für deine Antwort...vielleicht habe ich mich etwas missverständlich ausgedrückt...aber das ist mir schon klar das equals() die Anfangsadressen vergleicht und nicht den Inhalt der Parameter...und wenn man den Inhalt der Parameter vergleichen möchte muss man equals() override…
Meine Frage nochmals:
Es geht also schlicht weg nur darum, dass aus der main-Funktion wo die beiden Objekte erzeugt worden sind...jetzt Instanzvariable (Audi oder BMW ) in der die Anfangsadresse enthalten ist in die Klasse Waschanlage gebracht werden ( ich weiß auch garnicht ob das so ohne weiteres möglich ist!!!) um dann diese mit Fahrzeug zu vergleichen...und aufgund dieser Tatsache würde sich dann das Fahrzeug welches gewaschen wird eindeutig zuordnen...das wäre eine Möglichkeit...
Die zweite Möglichkeit wäre...dass man den Parameter welchen man an den Konstruktor übergibt also " Hersteller " an die Klasse Waschanlage weiter gibt...aber auch hier
bin ich nicht weitergekommen...
Ich kann ja auch das noch so in Kraftfahrzeug schreiben, dass

@ Override
public boolean equals(Object obj) {
if(!(obj instanceof Kraftfahrzeug)) {
return false;
}
Kraftfahrzeug kfz = (Kraftfahrzeug) obj;
if( this.hersteller != kfz.hersteller) {
System.out.println(this.hersteller);
return false;
}
if( this.ps != kfz.ps) {
System.out.println(this.ps);
return false;
}
if( this.verbrauch != kfz.verbrauch) {
System.out.println(this.verbrauch);
return false;
}
if( this.geschwindigkeit != kfz.geschwindigkeit) {
System.out.println(this.geschwindigkeit);
return false;
}
return true;
}

// Methoden
public void waschen() {


WaschAnlage waschanlage = new WaschAnlage();

waschanlage.fahrzeugWaschen(this.hersteller);
System.out.println("Hallo");
//System.out.println(this);
}
Das ich als Parameter den Hersteller übergebe der dann an die Funktion ** public void fahrzeugWaschen(Kraftfahrzeug fahrzeug)** Nun steht dann in fahrzeug die Adresse des Herstellers... Ich komme einfach nicht weiter an der Stelle weil ich nicht weiß wie man von dort aus die Abfrage erstellt...Das man klar und deutlich sagen kann wenn die Funktion aufgerufen wird das ist der Audi und das der BMW der gewaschen wird....
Ich hoffe das meine Frage jetzt etwas klarer geworden ist...
Danke nochmals für deine Unterstützung...

Gruß

Snowleopard
15.06.2019
0
Vertsehe ich dich richtig, dass du in Waschanlage.fahrzeugWaschen() einfach den Hertseller ausgeben willst? Dann musst du keinen Vergleich mit equals durchführen. Statt dessen kannst du einfach

System.out.println("Methoden Aufruf " + fahrzeug.getHersteller() + " wird gewaschen!!!!");

schreiben.

Davon unabhängig kann dein Code nicht funktionieren. Du hast in einer Instanz der Klasse WaschAnlage keinen Zugriff auf die auf die Instanzvariablen Audi und BMW der main()-Methode. Das sollte dir eigentlich schon der Compiler sagen.
16.06.2019
luedi 2,2k 1 9

Stelle deine --Frage jetzt!