# Konstruktoren



## vin030 (23. Dez 2016)

```
package praktikum7;

import util.IO;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.Period;
import java.time.chrono.ChronoLocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.time.temporal.ChronoUnit;


public class Person
{

 
        String pnr;
        String name;
        String vorname;
        String email;
        LocalDate geborenAm;
 
 
    public static void main(String[] args)
        {
            PersonUtils prg = new PersonUtils();
            prg.execute();
        }
    void execute()
    {
        person();
        person(name,vorname);
        person(name, vorname,email);
        person(name,vorname,email,geborenAm);
    }
 
 
 
 
    public void person()
    { 
     
    }
 
    public void person (String name, String vorname)
    {
        this.name = name;
        this.vorname= vorname; 
    }
 
 
    public void person(String name, String vorname,String email)
    {
        this.name=name;
        this.vorname=vorname;
        this.email=email;
    }
 
    public void person(String name, String vorname, String email, LocalDate geborenAm)
    {
        this.name=name;
        this.vorname=vorname;
        this.email=email;
        this.geborenAm=geborenAm;
    }
 
 
 
}
```
http://www.pic-upload.de/view-32344425/7.2.jpg.html









dies ist meine Aufgabe und mein dazugehöriger code befindet sich darüber ich weiß nicht ob ich es richtig gemacht habe und genauso gut fehlt mir noch der Konstruktor mit den Kopier-Konstruktor Parameter vllt könnte mir jemand bei der Aufgabe helfen und Ansätze bereitstellen...
lg
vin030


----------



## Joose (23. Dez 2016)

Ein Konstruktor hat keine Rückgabetyp (auch nicht void) und heißt genauso wie die Klasse (Groß-/Kleinschreibung beachten!)

Die main-Methode hat einen falschen Inhalt. Du sollst dort mehrere Personen Objekte erstellen und deren Daten ausgeben (inkl das Alter in Jahren).
Um ein Objekt einer Klasse zu erstellen: `[Type] [variablenname] = new [gewünschter Konstruktor];`
Auf deine Aufgabe bezogen: `Person fritz = new Person("Fritz", "Müller");`

Die getter und setter fehlen noch komplett, ebenso die toString Methode.
In deinen Methoden "person" wird die PNR nicht gesetzt.

Wozu dient die Methode execute?
Wo wird das Alter berechnet?


----------



## vin030 (23. Dez 2016)

naja ich habe noch eine klase personUtils in der die PNR berechnet wird ich habe sowieso grad das Problem diese PNR nun an die jetztige Klasse zu übergeben, da ich so etwas noch nie getan habe.


----------



## vin030 (23. Dez 2016)

in der Klasse personUtils wird übrigens nach dem Namen des Patienten gefragt etc. also muss ich dass mit den Objekten verknüpfen ?


----------



## Joose (23. Dez 2016)

vin030 hat gesagt.:


> in der Klasse personUtils wird übrigens nach dem Namen des Patienten gefragt etc. also muss ich dass mit den Objekten verknüpfen ?


Keine Ahnung wie die Klasse PersonUtils ausschaut und was es bedeutet das nach dem Namen gefragt wird. Wie wird gefragt? Wird ein Parameter erwartet? Wird über die Konsole was eingelesen?

Es wäre schon ein Anfang wenn du beide benötigten Klasse für diese Aufgabe postest (Person und PersonUtils). Passe die Klasse Person so weit es schon geht an, anhand meiner Anmerkungen die ich gemacht habe.


----------



## vin030 (23. Dez 2016)

```
package praktikum7;
import util.IO;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.Period;
import java.time.chrono.ChronoLocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.time.temporal.ChronoUnit;
public class PersonUtils
{


                public static void main(String[] args)
            {
                PersonUtils prg = new PersonUtils();
                prg.execute();
            }





        final String name = IO.readString("Bitte den Nachnamen des Patienten eingeben:");
        final String vorname = IO.readString("Bitte geben Sie den Vornamen des Patienten an:");
        final int PERS_ANZ_MAX=100;
        final int TAGE_MAX = 20;
        final String KLINIK ="Lausitzer Gesundbrunnen.\nCottbus und Senftenberg";

   
   

void execute()
    {
        dateCalc();
        getNextKey(name, vorname, dateCalc());
    }


    public LocalDate dateCalc()
   
    {
        LocalDate today = LocalDate.now();
        LocalDate termin=LocalDate.of(2020, 3, 1);
        Period zeit = today.until(termin);
        int yearsOftime= zeit.getYears();
        int monthsOfTime= zeit.getMonths();
        int daysOfTime= zeit.getDays();
      
        System.out.println("es verbleiben noch "+daysOfTime+ " Tage und "+monthsOfTime + " Monate sowie "+yearsOftime +" Jahre bis zum nächsten Termin.");
        return termin;

    }
   
   
    public void getNextKey(String name, String vorname, LocalDate termin)
   
    {
        char firstName = vorname.charAt(0);
        char lastName = name.charAt(0);
        String strFN = ""+firstName;
        String strLN= ""+lastName;
        int number = 0;
        int id;
        number++;
        id=number;
        System.out.println(strFN+strLN+termin+id);
    }
   
}
```

dies ist bis her die andere Klasse PersonUtils.

Zu der Frage ob ein Parameter erwartet wird oder über die Konsole eingelesen wird, es wird über die Konsole eingegeben, hier ist nun auch schon mein gedankliches Problem ich erstelle ein Objekt in Person mit einem bereitgestelltem Namen, aber ich möchte ja einen über PersonUtils einlesen lassen über die Konsole


----------



## Joose (23. Dez 2016)

vin030 hat gesagt.:


> dies ist bis her die andere Klasse PersonUtils.


Und die Klasse Person hast du schon angepasst bzw ergänzt aufgrund meiner Anmerkungen?

Entscheide dich in welcher Klasse du deine main-Methode haben willst.



vin030 hat gesagt.:


> Zu der Frage ob ein Parameter erwartet wird oder über die Konsole eingelesen wird, es wird über die Konsole eingegeben


In der Aufgabenstellung steht nirgends etwas von über die Konsole einlesen, nur dass du eine Objekte (von der Klasse Person) erstellen sollst und deren Attribute und das Alter ausgeben!
Die Werte für die Objekte kannst du direkt angeben und musst ned umständlich über eine Konsole einlesen.

Und selbst wenn du sie dann über Konsole einlesen sollst, erledige die Aufgabe zuerstmal mit ein paar fixen Daten und kümmere dich später um das Einlesen. (Schritt für Schritt zur Lösung, nicht alles auf einmal)



```
final String name = IO.readString("Bitte den Nachnamen des Patienten eingeben:");
final String vorname = IO.readString("Bitte geben Sie den Vornamen des Patienten an:");
```
Du deklarierst hier Instanzattribute und willst diese gleich initialisieren, indem du von der Konsole liest.
Komplett die falsche Stelle dafür. Von der Konsole lesen würde ich vorerst mal beiseite lassen 


```
public void getNextKey(String name, String vorname, LocalDate termin)
{
   char firstName = vorname.charAt(0);
   char lastName = name.charAt(0);
   String strFN = ""+firstName;
   String strLN= ""+lastName;
   int number = 0;
   int id;
   number++;
   id=number;
   System.out.println(strFN+strLN+termin+id);
}
```
Laut Aufgabenstellung ist pnr ein String und soll durch den Aufruf von "getNextKey()" aus der Klasse PersonUtils initialisiert werden.
Sprich "getNextKey()" sollte einen String zurückgeben, bisher gibst du nur etwas auf der Konsole aus.

Warum deklarierst du in der Methode die Variable "number" jedesmal neu und erhöhst sie zugleich um 1? Danach weist du den Wert von "number" der Variable "id" zu und verwendest diese für den Key.
Ich gehe davon aus das "number" als Instanzattribut deklariert werden sollte und id kannst du direkt initialisieren `int id = number++;`

Wie schon weiter oben erwähnt gehe Schritt für Schritt an das Problem ran und versuche nicht X Baustellen gleichzeitig zu lösen.
1) Erstelle erstmal die Klasse Person mit allen benötigten Konstruktoren und getter/settern. (für die PNR setze anfangs einfach einen Leerstring)
2) Überschreibe die "toString" Methode in der Klasse Person
3) In der main-Methode erstellst du ein paar Personen Objekte und gibst die Daten auf der Konsole aus (mit Hilfe der toString-Methode)
4) Dann schreibst du deine PersonUtils Klasse ....
usw.


----------



## vin030 (23. Dez 2016)

Danke dafür schon mal zu der Sache mit der number dabei handelt es sich um die laufende Nummer welche deklarieren sollte es soll aus dem Vornamen Nachnamen und dem Datum sowie einer laufenden Nummer eine PNR gebildet werden die Aufgabe habe ich jetzt nicht mit gepostet


----------

