# Konstruktor



## Perkun (4. Nov 2012)

Hallo, ich hänge an dieser Aufgabe fest. Ich sollte eine Testklasse schreiben, mit der die Methoden aus der Klasse EinfachesAuto aufgerufen werden. Mein erster Lösungansatz sieht so aus:

```
public class EinfachesAutoTest {



    public static void main(String[] args) {

EinfachesAuto farbe01 = new meldung (braun);

system.out.println(farbe01.meldung);



}


}
```



Beim Kompilieren gibts nur Fehlermeldungen, was mache ich da falsch?






```
import java.util.Calendar;


 public class EinfachesAuto {

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

     // Konstruktor
     public EinfachesAuto(String besitzer, String autotyp, String farbe,
             int erstzulassung, int leistung, int kmStand) {
         this.besitzer = besitzer;
         this.autotyp = autotyp;
         this.farbe = farbe;
         this.erstzulassung = erstzulassung;
         this.leistung = leistung;
         this.kmStand = kmStand;
     }

     /**
      * Die Methode getAlter() dient zur Errechnung des Autoalters ueber die
      * Erstzulassung.
      *
      * @return 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);
     }

 }
```


----------



## Pentalon (4. Nov 2012)

Dein Konstruktoraufruf ist etwas komisch.


```
EinfachesAuto farbe01 = new meldung (braun);
```

Die Klasse heisst doch EinfachesAuto. So heisst dann auch der Konstruktor.


```
public EinfachesAuto(String besitzer, String autotyp, String farbe,
             int erstzulassung, int leistung, int kmStand
```

Der Konstruktoraufruf sollte dann lauten:

```
EinfachesAuto auto1 = new EinfachesAuto("Hans Dampf", "Rot", 2012, 300, 5);
```

danach kannst Du über 
	
	
	
	





```
auto1.meldung();
```

die Methode dieser Instanz der Klasse aufrufen.
Vorausgesetzt Deine Klasse hat keinen anderen Fehler (hab ich jetzt nicht wirklich angesehen).

Pentalon


----------



## Perkun (4. Nov 2012)

vielen Dank für deine Antwort.

ich muss über die Klasse EinfachesAutoTest die Parameter übergeben, so dass diese Klasse die Methoden aus der Klasse EinfachesAuto die Parameter übernehmen


----------



## Marcinek (4. Nov 2012)

Ist das eine frage oder weißt du nun was machen sollst?

Wieso denkst du, dass man dir besser helfen kann, wenn du die Fehlermeldung nicht postest?

Kann man nicht schon via google was dazu erfahren? - bestimmt kam der Fehler dchon mal auf. 

Beachte den link in meiner Signatur.


----------



## Perkun (4. Nov 2012)

^
2 errors

C:\java>javac EinfachesAutoTest.java
EinfachesAutoTest.java:12: error: invalid method declaration; return type requir
ed
public EinfachesAuto(String besitzer, String autotyp, String farbe,
       ^
1 error

C:\java>javac EinfachesAutoTest.java
EinfachesAutoTest.java:19: error: constructor EinfachesAuto in class EinfachesAu
to cannot be applied to given types;
EinfachesAuto auto1 = new EinfachesAuto("Hans Dampf", "Rot", 2012, 300, 5);
                      ^
  required: String,String,String,int,int,int
  found: String,String,int,int,int
  reason: actual and formal argument lists differ in length
1 error

C:\java>


----------



## Marcinek (4. Nov 2012)

Du kannst damit absolut nix anfangen??


----------



## Perkun (4. Nov 2012)

Das hier ist die Aufgabenstellung:


Schreiben Sie eine Testklasse EinfachesAutoTest.java, mit der Sie EinfachesAuto.class testen, in dem Sie drei Objekte erzeugen und deren Methoden aktivieren.


Teil 2:
Erweitern Sie den Quellcode Ihrer Klasse EinfachesAuto.java um
folgende Attribute:

 private String standort; 
 private long fahrgestellnummer; 

und um folgende Methoden:

    weiteren Konstruktor, der die neuen Attribute ebenfalls initialisiert.

    public String toString()
    Gibt die Werte der Objektattribute als formatierten String zurück.

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


----------



## Perkun (4. Nov 2012)

kann es sein dass ich nicht auf die Klasse EinfachesAuto zugreifen kann weil als modifizier private steht?


----------



## Marcinek (4. Nov 2012)

Übersetze mal die Fehlermeldung der letzen kompilierung ins deutsche. Ich mein die Lösung steht da.


----------



## Pentalon (4. Nov 2012)

Naja, wenn man sich den Konstruktor in Deiner Klasse ansieht, bemerkt man, dass er 6 Parameter möchte.
3 von Typ String und 3 INT. Das steht auch in der Fehlermeldung.


```
public EinfachesAuto(String besitzer, String autotyp, String farbe,
             int erstzulassung, int leistung, int kmStand)
```

Ich habe bei meinerm Posting den Autotyp übersehen.

Der Korrekte Aufruf ist:
EinfachesAuto auto1 = new EinfachesAuto("Hans Dampf", "Porsche", "Rot", 2012, 300, 5);

Das sind allerdings Dinge, die der Programmierer auch selber rausfinden können sollte, denn immerhin hat er ja die Klasse geschrieben.


```
public class EinfachesAutoTest {

	public static void main(String[] args) {

		EinfachesAuto auto1 = new EinfachesAuto("Hans Dampf", "Porsche", "Rot", 2012, 300, 5);
		auto1.meldung();
	}
}
```

Pentalon


----------



## Perkun (4. Nov 2012)

Oh da fehlt ja eine Instanzvariable

habs jetzt die Marke ergänzt.


----------



## Perkun (4. Nov 2012)

Sorry, bin ein absoluter Anfänger!


----------



## Perkun (4. Nov 2012)

Der Quellcode der Klasse EinfachesAuto war ja vorgegeben. Trotzdem, wer lesen kann ist klar im Vorteil.

Ich danke euch vielmals!


----------



## Marcinek (4. Nov 2012)

Es gibt auch im Forum sowas wie ein Edit Button.

:bahnhof:


----------



## Perkun (4. Nov 2012)

was genau meinst du damit?


----------



## Marcinek (4. Nov 2012)

:rtfm:

Du hast innerhalb von 6 Minuten drei Beiträge geschrieben. Wenn noch keine Antworten da sind hätte man ja den ersten Beitrag  noch editieren können. 

Vor allem sind ja nichtmal neue Informationen gekommen. =)


----------



## Perkun (4. Nov 2012)

schon, ihr habt ja während ich Textpad benutzte super schnell geantwortet.

ist nicht negativ gemeint. Hier kriegt man super schnelle Antworten. Danke.

Aber ich fürchte ich hänge nun an der nächsten Stelle fest.....


----------



## Perkun (4. Nov 2012)

```
public class EinfachesAutoTest {




    public static void main(String[] args) {




EinfachesAuto auto1 = new EinfachesAuto("Hans Dampf", "Pobel", "Rot", 2012, 300, 5);

auto1.meldung();



EinfachesAuto auto2 = new EinfachesAuto("Hans Dampf", "Pobel", "Blau", 2012, 300, 5);


System.out.println(auto2.getAlter());
}


}
```


wollte die Methode getAlter () in Gang setzen, aber irgendwie scheint das nicht zu klappen.

meine bisherigen Ergebnisse:

C:\java>java EinfachesAutoTest
Hier gruesst das Rote Auto von Hans Dampf
C:\java>javac EinfachesAutoTest.java

C:\java>java EinfachesAutoTest
Hier gruesst das Rote Auto von Hans Dampf0


----------



## Marcinek (4. Nov 2012)

[STRIKE]Tja, du hast leider nix verstanden.[/STRIKE]

Buch nehmen.

Den Link in meiner Signatur lesen.

---

Sieht aus, als ob es klappen würde. :applaus:


----------



## Gast2 (4. Nov 2012)

Perkun hat gesagt.:


> Schreiben Sie eine Testklasse EinfachesAutoTest.java, mit der Sie EinfachesAuto.class testen, in dem Sie drei Objekte erzeugen und deren Methoden aktivieren.



Beuth Hochschule für Technik Berlin? Wenn Ja -> mein Beileid!


----------



## javaninja (4. Nov 2012)

mogel hat gesagt.:


> Beuth Hochschule für Technik Berlin? Wenn Ja -> mein Beileid!



@mogul

Bin gerade über gleiche Aufgabe in diesem Forum gelandet. Und lese den letzten Beitrag.

Habe mich doch gerade dort zum berufsbegleitenden Studium angemeldet!

Warum Beileid???


----------



## ARadauer (4. Nov 2012)

mein Beileid an die Lehrer...


----------



## Pentalon (4. Nov 2012)

Hey Perkun

Das passt doch eh.
Er schreibt etwas Formlos 0 hin. Das ist auch genau das Alter des Autos, dessen Erstzulassung 2012 ist.
Gib Deinen Auto ein äteres Datum, dann wirst Du sehen, dass die Berechnung stimmt.


```
EinfachesAuto auto2 = new EinfachesAuto("Hans Peter", "Pobel", "Blau", 2010, 300, 5);
System.out.println("Das Alter von Auto2 ist: "+auto2.getAlter());
```

Pentalon


----------



## Ark (4. Nov 2012)

mogel hat gesagt.:


> Beuth Hochschule für Technik Berlin? Wenn Ja -> mein Beileid!





ARadauer hat gesagt.:


> mein Beileid an die Lehrer...


Habe ich was verpasst? oO *neugierig*

Ark


----------



## Gast2 (4. Nov 2012)

ARadauer hat gesagt.:


> mein Beileid an die Lehrer...


eher mein Beileid an die Studenten - das Script ist völlig chaotisch



Ark hat gesagt.:


> Habe ich was verpasst? oO *neugierig*


Meine Frau hat das letztes Semester gemacht - "Einführung in die Programmierung". Lt. Dozentin durfte nichts kopiert werden. Den Studenten wurde ein Framework mitgegeben welches beim kompilieren eingebunden werden sollte. Es wurde nicht erklärt wie und was Packages sind wurde erst nach dem halben Script so halb erklärt. Meine Frau ist nur am verzweifeln gewesen.

Ich weis das man als Student sich selber um Details kümmern sollte, also sich tiefer mit der Materie auseinander setzen. Aber wenn im Script vom Dozenten nicht mal die Grundlagen erklärt werden und bei Fragen als Antwort fast immer kommt "das machen wir später" ist das alles fürn Arm.

hand, mogel


----------



## javaninja (4. Nov 2012)

mogel hat gesagt.:


> eher mein Beileid an die Studenten - das Script ist völlig chaotisch
> 
> 
> Meine Frau hat das letztes Semester gemacht - "Einführung in die Programmierung". Lt. Dozentin durfte nichts kopiert werden. Den Studenten wurde ein Framework mitgegeben welches beim kompilieren eingebunden werden sollte. Es wurde nicht erklärt wie und was Packages sind wurde erst nach dem halben Script so halb erklärt. Meine Frau ist nur am verzweifeln gewesen.
> ...



:applaus:

Ja danke da fühle ich mich verstanden. Finde das Skript auch nicht sehr spitze. Mit jeder weiteren Lektion kann ich vorangegangen Übungen erst verstehen. Na ja mal schauen wie lange ich durchhalte.


----------



## Perkun (4. Nov 2012)

Hallo zusammen,

ja ich weiß, dass man als Student sich ein bißchen Mühe geben soll. Da ich neben Familie & Vollzeitjob dieses Studium nebenher betreibe und zuvor mit der Programmierung nichts am "Hut" hatte, fällt mir dies alles nicht ganz so leicht.

Für manche ist das alles hier ein Kinderspiel und haben wohl keine Schwierigkeiten mit java, mein Glückwunsch an all jene.

Dies sind meine ersten Schritte in java und so leicht möchte ich einfach nicht aufgeben.

Ein großes Lob an Pentalon, vielen Dank für deine Hilfe.

Das mit dem Baujahr ist mir vorhin auch aufgefallen, habe dies abgeändert und da zeigte er wieder nichts an.

Jetzt habe ich das genau so geschrieben wie du es vorgeschlagen hattest und es klappte


```
public class EinfachesAutoTest {




    public static void main(String[] args) {

EinfachesAuto auto1 = new EinfachesAuto("Erich K.", "Kutsche", "zitronengelb", 1933, 300, 5);
EinfachesAuto auto2 = new EinfachesAuto("Hans M.", "Tüff Tüff", "kastanienbraun", 1900, 300, 5);
EinfachesAuto auto3 = new EinfachesAuto("Fritz H.", "RocketV", "himmelblau", 1900, 300, 5);



auto1.meldung();
System.out.println("");

auto2.meldung();
System.out.println("");

auto3.meldung();
System.out.println("");


EinfachesAuto auto4 = new EinfachesAuto("Hans Peter", "Pobel", "Blau", 2010, 300, 5);
System.out.println("Das Alter von Auto4 ist: "+auto4.getAlter());



}



}
```


:toll:


----------

