Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
---- formale Sprachen (http://www.informatikerboard.de/board/board.php?boardid=12)
----- Bei Java Konstruktor in einem andern Konstruktor verwenden (http://www.informatikerboard.de/board/thread.php?threadid=1431)


Geschrieben von Lycaner am 28.03.2013 um 08:32:

  Bei Java Konstruktor in einem andern Konstruktor verwenden

Ich muss ein Programm in Java schreiben, bei dem ich ein Konstruktor selber schreibe und später habe ich eine zweite Klasse, wo ich ein neune Konstruktor schreiben muss. Bei dem neuen muss ich den alten auch verwenden und ich weiß nicht wie das gehen soll.

z.B.

public class persönlicheDaten{

public PersönlicheDaten(String vorname, String nachname){
this.vorname=vorname;
this.nachname=nachname;
}
.............
......
...
}
/**************andere Klasse**********/
public class persönlicheDatensatz{

public persönlicheDatensatz(PersönlicheDaten(), int gebTag, int gebMonat, int gebJahr){
this.PersönlicheDaten=PersönlicheDaten;
this.gebTag=gebTag;
this.gebMonat=gebMonat;
this.gebJahr=geb.Jahr;
}
..........


Wie muss man es richtig schreiben?



Geschrieben von eulerscheZahl am 28.03.2013 um 09:37:

 

Ist zwar C#, sollte aber so oder sehr ähnlich auch in Java funktionieren:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
    public class persoenlicheDaten
    {
        public string vorname, nachname;
        public persoenlicheDaten(string vorname, string nachname)
        {
            this.vorname = vorname;
            this.nachname = nachname;
        }
    }

    public class persoenlicherDatensatz
    {
        public persoenlicheDaten per;
        public int gebTag, gebMonat, gebJahr;
        public persoenlicherDatensatz(persoenlicheDaten per, int gebTag, int gebMonat, int gebJahr)
        {
            this.per = per;
            this.gebTag = gebTag;
            this.gebMonat = gebMonat;
            this.gebJahr = gebJahr;
        }

        public persoenlicherDatensatz(string vorname, string nachname, int gebTag, int gebMonat, int gebJahr)
        {
            this.per = new persoenlicheDaten(vorname,nachname);
            this.gebTag = gebTag;
            this.gebMonat = gebMonat;
            this.gebJahr = gebJahr;
        }
    }

//Und der Aufruf:
persoenlicheDaten pd = new persoenlicheDaten("Hans", "Meier");
persoenlicherDatensatz pds = new persoenlicherDatensatz(pd, 1, 1, 1970);
//bzw. mit anderem Konstruktor:
persoenlicherDatensatz pds = new persoenlicherDatensatz("Hans", "Meier", 1, 1, 1970);



Geschrieben von Lycaner am 28.03.2013 um 11:40:

 

13: public persoenlicheDaten per;
14:public int gebTag, gebMonat, gebJahr;

Was sollen diese Zeilen bedeuten?
Ich dachte erst, dass die Zeile 13 die Methode aufruft aber die heißt anders.
Und wenn man du in Zeile 14 die Variabel mit dem Typ (int) deklarierst, ist das dann nicht doppelt weil in Zeile 15 wird das noch mal gemacht.
Ist ab Zeile 23, das zweite Beispiel , wie man es machen kann?



Geschrieben von eulerscheZahl am 28.03.2013 um 11:56:

 

In Zeile 13/14 sind die in der Klasse verwendeten Variablen.

In Zeile 15-21 ist ein Konstruktor, der die Klasse persoenlicheDaten übergeben bekommt.
Aufruf ist in Zeile 33/34.

In Zeile 23-30 ist ein anderen Konstruktor, der statt persoenlicheDaten zwei strings annimmt und diese dann selbst (Zeile 25) in persoenlicheDaten umwandelt.
Aufruf dazu in Zeile 36

Und ich habe keine Variable doppelt deklariert:
In Zeile 13/14 (übrigens auch in Zeile 3) sind die nach außen sichtbaren Variablen, die man abfragen/ändern kann, z.B. mit:
string vor = pds.per.vorname;
Innerhalb der Klasse wird mit this.Variablenname darauf zugegriffen.
Mit this.gebTag = gebTag; sage ich also, dass das nach außen Sichtbare den übergebenen Wert annimmt.



Geschrieben von Lycaner am 28.03.2013 um 13:27:

 

Ok danke.

Kannst du mir vielleicht sagen, wie ich die Felder abrufen/fühlen kann, wenn ich ein Datenfeld mit persoenlicherDatensatz erzeug habe.
z.B.
persoenlicherDatensatz Datenfeld[]=new persoenlicherDatensatz[10];

Muss ich dann sowas schreiben wie:
Datenfeld[0]=new Datenfeld("Hans", "Meier", 1, 1, 1970);



Geschrieben von eulerscheZahl am 28.03.2013 um 13:50:

 

nicht ganz:
code:
1:
2:
persoenlicherDatensatz[] Datenfeld = new persoenlicherDatensatz[10];
Datenfeld[0] = new persoenlicherDatensatz("Hans", "Meier", 1, 1, 1970);


Datenfeld ist ja aus der Klasse persoenlicherDatensatz. Außerdem hast du beim Initialisieren das Arrays die eckigen Klammern falsch platziert.



Geschrieben von Lycaner am 28.03.2013 um 17:07:

 

Bei mir funktioniert das irgendwie nicht. Kommt immer ein Fehler.

cannot find symbol



Geschrieben von eulerscheZahl am 28.03.2013 um 22:39:

 

Um das ganze unter Java zum Laufen zu bringen, musste ich string zu String machen, also groß schreiben, ansonsten sollte das alles passen, bei mir läuft es zumindest.
In welcher Zeile tritt der Fehler denn bei dir auf?



Geschrieben von Lycaner am 29.03.2013 um 00:05:

 

public class Test5 {


public static void main(String[] args) {

1: Test7[] datenfeld= new Test7[10];

2: datenfeld[1] = new Test7("Hans", "Meier", 1, 1, 1970);

}

Also in dem Hauptprogramm tritt der Fehler auf(Zeile 1 und Zeile 2).
Ich habe ein neues Projekt angelegt und das rein kopiert, was du geschrieben hast. Ich wollt das Programm nicht verunstalte und mehr kaputt mache als es schon so ist. Deswegen habe ich die Klassen umbenannt. In den Klassen zeigt mir kein Fehler an. Aber in der Hauptklasse funktioniert nichts.

C war in der Hinsicht viel leichter, wo man alles in ein Fenster schreiben konnte(



Geschrieben von eulerscheZahl am 29.03.2013 um 09:25:

 

Eine Ferndiagnose ist schwer.
Hast du
- Die Namen der Klassen auch nicht vertauscht
- Das richtige Package zugewiesen
- Für jede Klasse ein eigenes .java-File erstellt

Hier noch ein Screenshot, wie es bei mir aussieht:



Geschrieben von Lycaner am 29.03.2013 um 10:43:

 

Erst mal, danke für deine Mühe.

Ich habe genauso abgetippt und das hat nur funktioniert, als ich den zweiten Konstruktor eingefügt habe.

Leider steht in der Aufgabenstellung, dass man den ersten Konstruktor verwenden soll. Und wenn ich das mache, kann ich kein Array erzeugen( zu minderst da taucht der erster Fehler auf(



Geschrieben von eulerscheZahl am 29.03.2013 um 11:06:

 

meinst du so?
Datenfeld[0] = new persoenlicherDatensatz(new persoenlicheDaten("Hans", "Meier"), 1, 1, 1970);

falls nein, bitte ich um den genauen Wortlaut der Aufgabe, weil ich immer noch nicht weiß, was du vorhast.



Geschrieben von Lycaner am 30.03.2013 um 16:54:

 

Aufgabe 2b.
Entwerfen Sie einen geeigneten Konstruktor, der alle persönlichen Daten und Datensatz eines Fussbalspielers als Parameter erhält.

Unter den persönlichen Daten habe ich 7 Attribute und im dem Datensatz kommen 6 weiter Attribute hinzu.
Deswegen wollte ich den ersten Konstruktor verwenden, weil dann das Programm viel kürzer wird.



Geschrieben von Lycaner am 30.03.2013 um 17:27:

 

Aufgabe 2c.
Die Methode zeigeSpielerdaten() soll alle persönlichen und Spielerdaten
anzeigen. Zur Anzeige der persönlichen Daten soll die Methode zeigeDaten
der Klasse PersoenlicheDaten aufgerufen werden.

Die Methode zeigeDaten habe ich programmiert und dann wollte ich diese Methode in der Methode PersönlicheDaten abrufen aber es kommt immer ein Fehler vor, obwohl ich den abruf einige Programm im Internet gesehen habe(

public void zeigeDaten() {
System.out.println("Vorname und Nachname: "+vorname+" "+nachname);
}


public void zeigeSpielerdaten() {
System.out.println(zeigeDate per()); diese Zeile wird rot unterstrichen(
System.out.println("");
}

Die zweite Methode steht in der anderen Klasse als die erste Methode.



Geschrieben von eulerscheZahl am 30.03.2013 um 17:54:

 

Versuche mal per.zeigeDaten();
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
package meinPaket;
public class main {
	public static void main(String[] args) {
		persoenlicherDatensatz[] Datenfeld = new persoenlicherDatensatz[10];
		Datenfeld[0] = new persoenlicherDatensatz(new persoenlicheDaten("Hans", "Meier"), 1, 1, 1970);
		Datenfeld[0].zeigeDatensatz();
	}

}


package meinPaket;
public class persoenlicheDaten {
    public String vorname, nachname;
    public persoenlicheDaten(String vorname, String nachname)
    {
        this.vorname = vorname;
        this.nachname = nachname;
    }
    
    public void zeigeDaten(){
    	System.out.println("Vorname und Nachname: "+vorname+" "+nachname);	
    }
}


package meinPaket;
public class persoenlicherDatensatz {
    public persoenlicheDaten per;
    public int gebTag, gebMonat, gebJahr;
    public persoenlicherDatensatz(persoenlicheDaten per, int gebTag, int gebMonat, int gebJahr)
    {
        this.per = per;
        this.gebTag = gebTag;
        this.gebMonat = gebMonat;
        this.gebJahr = gebJahr;
    }

    public persoenlicherDatensatz(String vorname, String nachname, int gebTag, int gebMonat, int gebJahr)
    {
        this.per = new persoenlicheDaten(vorname,nachname);
        this.gebTag = gebTag;
        this.gebMonat = gebMonat;
        this.gebJahr = gebJahr;
    }
    
    public void zeigeDatensatz(){
    	per.zeigeDaten();
    }
}


Forensoftware: Burning Board, entwickelt von WoltLab GmbH