# Java Autoverwaltung



## Nyu (21. Nov 2015)

Hallo schönen guten Tag!

Ich bin ein Schüler einer Informatik Klasse und ich muss folgende Aufgabe lösen:


"In diesem Teil wird das Programm EinfachesAuto.java ergänzt. Speichern Sie die DateiEinfachesAuto.java unter ErgaenztesAuto.java ab.

Fügen Sie die folgenden Attribute hinzu:

private String standort;
private String fahrgestellnummer;

und auch die folgenden Methoden:


public String toString()
Gibt die Werte der Objektattribute als formatierten String zurück.
public void setzeNeuesZiel(String ziel, int entfernung)
Die Methode schreibt eine Meldung auf den Bildschirm: 
Auto fährt von [Standort] nach [Ziel]. 
Die Entfernung beträgt [Entfernung] km. 
Die Methode speichert den neuen Standort und den neuen Kilometerstand.
Und ersetzen Sie den Konstruktor, damit er alle Attribute - auch die neuen - initialisiert.
Nicht vergessen: der Konstruktor heißt wie die Klasse."

Aus folgendem Quelltext : "

```
package einfachesauto;

import java.util.Calendar;

/**
* Klasse zum Erzeugen von Auto Objekten.
*
* @author **
* @bearbeitet von **
* @version 1.02, 07/2012
*/

public class ErgänztesAuto {

    // Instanzvariablen
    private String besitzer;
    private String autotyp;
    private String farbe;
    private int erstzulassung;
    private int leistung;
    private int kmStand;
    private String standort;
    private String fahrgestellnummer;

    /**
     * Konstruktor fuer die Klasse EinfachesAuto
     *
     * @param besitzer
     *            Name des Autobesitzers
     * @param autotyp
     *            Typ des Autos
     * @param farbe
     *            Farbe des Autos
     * @param erstzulassung
     *            Jahreszahl der Autozulassung
     * @param leistung
     *            PS-Zahl des Autos
     * @param kmStand
     *            Kilometerstand des Autos
     * @param standort
     *            Standort des Autos
     * @param fahrgestellnummer
     *            Fahrgestellnummer des
     */

    public ErgänztesAuto(String besitzer, String autotyp, String farbe,
            int erstzulassung, int leistung, int kmStand, String standort,
            String fahrgestellnummer) {
  
        this.besitzer = besitzer;
        this.autotyp = autotyp;
        this.farbe = farbe;
        this.erstzulassung = erstzulassung;
        this.leistung = leistung;
        this.kmStand = kmStand;
        this.standort = standort;
        this.fahrgestellnummer = fahrgestellnummer;
    }

    /**
     * Die Methode getAlter() dient zur Errechnung des Autoalters ueber die
     * Erstzulassung.
     *
     * [USER=49078]@Return[/USER] int: Alter des Autos
     */
    public int getAlter() {
        // Ermittlung des aktuellen Jahres
        Calendar aktuellerKalender = Calendar.getInstance();
        int aktuellesJahr = aktuellerKalender.get(Calendar.YEAR);
        return aktuellesJahr - this.erstzulassung;
    }

    /**
     * Die Methode meldung() gibt die Attribute "farbe" und "besitzer" auf der
     * Standardausgabe aus.
     */
    public void meldung() {
        System.out.print("Hier gruesst das " + this.farbe + "e ");
        System.out.print("Auto von " + this.besitzer + ". ");
    }
    /**
     * Die Methode schreibt eine Meldung auf den Bildschirm:
     *Auto fährt von [Standort] nach [Ziel].
     *Die Entfernung beträgt [Entfernung] km.
     *Die Methode speichert den neuen Standort und den neuen Kilometerstand.
     */
public void setzeNeuesZiel(String ziel, int entfernung)
   {
      this.standort = ziel;
      this.kmStand = entfernung+this.kmStand;
  
System.out.println("Auto fährt von" + standort + "nach." + ziel);
System.out.println("Die Entfernung beträgt" + entfernung + "km.");
   }
}
```





Ich mache das ganze per Netbeans. Ich habe soweit die Attribute hinzugefügt. Aber ich verstehe nicht ganz die Aufgabe "public String toString()
Gibt die Werte der Objektattribute als formatierten String zurück."

Ebenso wie die Methode "

public void setzeNeuesZiel(String ziel, int entfernung)
Die Methode schreibt eine Meldung auf den Bildschirm: 
Auto fährt von [Standort] nach [Ziel]. 
Die Entfernung beträgt [Entfernung] km. 
Die Methode speichert den neuen Standort und den neuen Kilometerstand." 

Ich habe soweit die zweite Methode geschrieben wie ich eigentlich konnte, außerdem verstehe ich nicht ganz was hiermit gemeint ist "Und ersetzen Sie den Konstruktor, damit er alle Attribute - auch die neuen - initialisiert.
Nicht vergessen: der Konstruktor heißt wie die Klasse." 

Ich hoffe mir kann jemand schnellst möglich helfen ! Quelltext + Erklärung wäre wirklich sehr schön, da wir wirklich grade erst damit Angefangen habe und ich das nicht so wirklich verstehe.


----------



## Saheeda (21. Nov 2015)

toString soll einfach nur einen hübsch lesbaren String mit den Attributen zurück geben:


```
public String toString(){

    return "Besitzer: " + this.besitzer+ ", Autotyp: " + this.autotyp;
}
```

Das mit dem Konstruktor würde ich so verstehen:


```
public Animal(String name){

}

public Cat(String name, String color){
    super(name)
    this.color = color;
}
```

Der Konstruktor der Kind-Klasse wurde um "seine" Attribute erweitert, gibt aber alle Argumente der Elternklasse über super() "nach oben" und initialisiert sie nicht selbst.


----------



## Nyu (21. Nov 2015)

Ja okay das mit dem ToString() verstehe ich ! Sowas in der Art hatte ich im Kopf.. Dachte aber das sei zu einfach.. 


Das mit der "Kind-Klasse" verstehe ich jetzt nicht ganz! 

Soll ich also die Klasse "ErgänztesAuto" über eine andere Klasse initialisieren? 

Sie kennen sich ja anscheinend sehr gut aus! Ist es Möglich ein Auge auf die Aufgabe zu werfen?


Ebenso wie die Methode "

public void setzeNeuesZiel(String ziel, int entfernung)
Die Methode schreibt eine Meldung auf den Bildschirm: 
Auto fährt von [Standort] nach [Ziel]. 
Die Entfernung beträgt [Entfernung] km. 
Die Methode speichert den neuen Standort und den neuen Kilometerstand." 


Das ist mein Code ->

```
public void setzeNeuesZiel(String ziel, int entfernung)
   {
      this.standort = ziel;
      this.kmStand = entfernung+this.kmStand;
      
System.out.println("Auto fährt von" + standort + "nach." + ziel);  
System.out.println("Die Entfernung beträgt" + entfernung + "km."); 
   }
```


Danke im voraus !


----------



## Saheeda (21. Nov 2015)

Du hast eine Klasse EinfachesAuto (mit Konstruktor) und eine Klasse ErgänztesAuto (wofür du einen Konstruktor schreiben sollt). Richtig?

Ich verstehe die Aufgabe so, dass ErgänztesAuto von EinfachesAuto erben und es um ein paar Eigenschaften erweitern soll. Richtig?


In der setzeNeuesZiel-Methode würde ich die Ausgabe über das zuweisen setzen.
Wenn zuerst die Zuweisung erfolgt, steht dann in der Ausgabe "Das Auto fährt von Hamburg nach Hamburg."


----------



## Nyu (21. Nov 2015)

Also folgendes: Wir haben den Anfangs Quellcode EinfachesAuto. Daraus sollten wir EinfachesAutoTest mit folgenden Methoden machen, um sie zu testen, also die Klasse "EinfachesAuto":


```
public class EinfachesAutoTest {
  
    public static void main(String[] args) {
      
EinfachesAuto Auto1 = new EinfachesAuto("Jochen","VW Golf","silber",2005,145,865545);
EinfachesAuto Auto2 = new EinfachesAuto("Sabine","Porsche Cayenne","blau",2009,240,227878);
EinfachesAuto Auto3 = new EinfachesAuto("Dieter","Opel Astra","weiß",2007,76,451123);

Auto1.meldung();
Auto2.meldung();
Auto3.meldung();
      
}
```

So sollten wir aus "EinfachesAuto" -> "Ergänztes Auto" machen und die beiden Instanzvariablen hinzufügen :"Fügen Sie die folgenden Attribute hinzu:

private String standort; *(habe ich erledigt)*
private String fahrgestellnummer;" *(habe ich erledigt)*

Nun sollten wir das hier machen : "und auch die folgenden Methoden:

public String toString()
Gibt die Werte der Objektattribute als formatierten String zurück. *(Ist ja anscheinend erledigt?) *

public void setzeNeuesZiel(String ziel, int entfernung) *(Brauche ich noch, da ich nicht weiß ob meins richtig ist !)*
Die Methode schreibt eine Meldung auf den Bildschirm:
Auto fährt von [Standort] nach [Ziel].
Die Entfernung beträgt [Entfernung] km.
Die Methode speichert den neuen Standort und den neuen Kilometerstand.

Hier von wurde mir ja von ihnen die erste erklärt und gegeben. Nach der zweiten habe ich ja grade gefragt! Der Schlussteil der Aufgabe lautet dann wie folgt: "

Und ersetzen Sie den Konstruktor, damit er alle Attribute - auch die neuen - initialisiert.
Nicht vergessen: der Konstruktor heißt wie die Klasse. *(Brauche ich noch!)*

Denken Sie daran, Ihr Programm mit javadoc-Kommentaren zu versehen.
Schreiben Sie eine weitere Testklasse ErgaenztesAutoTest.java, um das Programm zu testen."

Ich denke mal ich soll hier halt "Ergänztes Auto" testen indem ich nach der Methode "setzeNeuesZiel" frage richtig?


Habe ich jetzt auch so ! 

```
public void setzeNeuesZiel(String ziel, int entfernung)
       
   { System.out.println("Auto fährt von" + standort + "nach" + ziel + ".");  
     System.out.println("Die Entfernung beträgt" + entfernung + "km.");
     
     this.standort = ziel;
     this.kmStand = entfernung+this.kmStand;
   }
```

Die Zuweisung da unter.


----------



## Saheeda (21. Nov 2015)

Achso, ok. Ich bin von einer Vererbung ausgegangen.
Dann hast du das mit dem Konstruktor bereits erledigt.  Standort und Fahrgestellnummer sollten laut Aufgabe Parameter im Konstruktor sein und den Eigenschaften standort und fahrgestellnummer zugewiesen werden.
Das steht ganz oben in deinem Eingangspost ;-)

Und die setzeNeuesZiel sieht soweit auch in Ordnung aus.



Wenn du wieder sowas hast, dass du nicht weißt, ob dein Code richtig ist: Probiers aus! Erstelle ein Fahrzeug, lass alle Werte ausgeben, lege ein neues Ziel fest und lasse wieder alles ausgeben. Schon siehst du, obs funktioniert. ;-)


----------



## Nyu (21. Nov 2015)

Was ist hier mit? ->Und ersetzen Sie den Konstruktor, damit er alle Attribute - auch die neuen - initialisiert.
Nicht vergessen: der Konstruktor heißt wie die Klasse. *(Brauche ich noch!) *

Sie meinten ja ich habe das schon erledigt oder wie? Dann eher unbewusst. Weil ich wüsste nicht wo?!

Und das hier : Schreiben Sie eine weitere Testklasse ErgaenztesAutoTest.java, um das Programm zu testen.

Soll ich dann in "ErgaenztesAutoTest.java" die methode "setzeNeuesZiel" aufrufen? Wenn ja, mache ich das genau so wie in dem anderen Quellcode mit der "public void main"? Und dann der Methode "setzeNeuesZiel" etwas festlege wie "ErgänztesAuto Auto4 = new ErgänztesAuto("Hamburg" , 10); ?


----------



## Khal Drogo (21. Nov 2015)

Die Aufgabe mit dem Konstruktor versuche ich nun an einem kurzen Beispiel zu erläutern.
Bis jetzt haben Sie folgendes (prinzipiell):



Spoiler





```
class Auto {
  String name;
  int kmStand;

  // Jetzt kommt der Konstruktor
  public Auto(String name, int kmStand) {
    this.name = name;
    this.kmStand = kmStand;
  }
}
```



Angenommen, du sollst jetzt das Auto um eine Farbe ergänzen und den Konstruktor so anpassen, dass die neuen Variablen initialisiert werden (deine Aufgabe!):



Spoiler





```
class ErgaenztesAuto {
  String name;
  int kmStand;
  String farbe; // neues Attribut

  // Neuer, angepasster Konstruktor
  public ErgaenztesAuto(String name, int kmStand, String farbe) {
    this.name = name;
    this.kmStand = kmStand;
    this.farbe = farbe; // Hier wird das neue Attribut durch den Konstruktor initialisiert
  }
}
```



Damit solltest du jetzt was anfangen können, testen kannst du, indem du dir in einer entsprechenden Klasse Autos erstellst und bspw. in einer Main-Funktion ein paar Ausgaben machst.

Mit freundlichen Grüßen
Xelsarion


----------



## JStein52 (21. Nov 2015)

Du hast ja alles richtig gemacht. Das mit dem Konstruktor waren nur Hinweise damit dir beim Kopieren der ursprünglichen Klasse nichts durch die Lappen geht.
Und die Klasse ErgaenztesAutoTest bekommt einfach eine main-Methode in der  du dir eine Instanz der Klasse ErgaenztesAuto anlegst und dann deren Methode mit sinnvollen Parametern aufrufst um zu sehen ob alles funktioniert wie gewünscht.


----------

