2016-09-27 1 views
0

Ich habe dieses Java-Programm, in dem eine Liste der Personenklasse erstellt wird ... Das dateofBirth ist ein Objekt-Argument in der Personenklasse. Jetzt stehe ich vor einem Problem; Wie initialisiert man ein Objekt der Person in der Liste oder wie man das DateOfBirth-Objekt in Person's Constructor übergibt?Wie übergibt man ein Objekt als Argument in einem Konstruktor einer anderen Klasse?

class DateOfBirth{ 
    private int year; 
    private int month; 
    private int day; 

    DateOfBirth(){ 
     this.year = 0; 
     this.month = 0; 
     this.day = 0; 
    } 

    DateOfBirth(int y, int m, int d){ 
     if(y>1900){ 
      year = y; 
     } 
     else{ 
      System.err.println("the year is too small too old");   
     } 
     if(0<month && month<13){ 
      month = m; 
     } 
     else{ 
      System.err.println("month should be within 1 to 12."); 
     } 
     if(0<day && day<30){    
      day = d; 
     }   

    } 


    public int getYear() { 
     return year; 
    } 

    public int getMonth(){ 
     return month; 
    } 
    public int getDay(){ 
     return day; 
    } 

} 
class Person{ 
    private String name; 
    private int age; 
    private DateOfBirth Dob; 

    public Person(String name, int age, DateOfBirth dob){ 
    this.name = name; 
    this.age = age; 
    this.Dob = dob; 
    } 

    public String getName() { 
     return name; 
    } 

    public DateOfBirth getDob() { 
     return Dob; 
    }  

    public int getAge() { 
     return age; 
    } 

} 

public class MyList { 
    ArrayList<Person> Personlist = new ArrayList<Person>(); 

    Person person=new Person("John",23,...) // how to pass the DateOfBirth object here?  

} 
+0

'Person Person = neue Person (" John ", 23, neue DateOfBirth (1990,10,10))' – passion

+0

Passion sollten Sie Ihren Kommentar als Antwort hinzufügen –

+1

übrigens, um das Alter zu vererben, wenn Sie DOB in haben dort .. berechnen Alter basierend auf DOB – Sanjeev

Antwort

5

zuerst ein Datum aus und nutzen Sie dann, dass

public class MyList { 
     ArrayList<Person> Personlist = new ArrayList<Person>(); 

DateOfBirth date = new DateOfBirth(2000, 1, 1); 
    Person person = new Person("John", 16, date); 

} 

hoffe, das hilft als Parameter übergeben.

+2

Sie haben einen Fehler gemacht, Person Person = neue Person ("John", 23, Datum); aber +1 :) –

+0

danke! @luud van keulen – topjor

2

Make-Objekt von DateOfBirth wo Sie brauchen, und dann ist es einfach wie diese von

public class MyList { 
     ArrayList<Person> Personlist = new ArrayList<Person>(); 

DateOfBirth dob= new DateOfBirth(1992, 2, 3); 
    Person person=new Person("John",23,dob); 

} 
+0

@TeunvanderWijst war schneller, sorry –

+0

:) natürlich Slim –

2

Als Ergänzung zu der Antwort auf Kontruktor @TeunVanDerWijst Sie auch Person anderen Konstruktor in der Klasse schaffen könnte, die das schaffen würde Instanz in der Person Klasse selbst. Der Konstruktor könnte wie folgt aussehen.

public Person(String name, int age, int y, int m, int d) { 
    this(name, age, new DateOfBirth(y, m, d)); 
} 

Die this nennen würde nur den anderen Konstruktor, die frisch erzeugten DateOfBirth Instanz dann zuweisen würde.

Jetzt können Sie eine Instanz von Person erstellen, indem Sie einfach das Jahr, den Monat und den Tag als int übergeben.

Person person=new Person("John", 23, 2000, 9, 12); 
0

wenn das dateOfBirth ist, gehört zu Person brauchen Sie nicht das neue Objekt DateOfBirth

es einfach tun zu erstellen:

Person person = new Person("John",23,new DateOfBirth(1985,5,5)); 

oder auch wie:

try 
{ 
    Personlist.Add(new Person("John",23,new DateOfBirth(1985,5,5))); 
} 
catch(Exception ex) 
{ 
    // 
} 

Als Ratschlag sollten Sie niemals Klassennamen wie MyList verwenden. Liste ist Sammlung, MyList ist ??? neue Sammlungsart? was es hat ?? versuchen, Namen zu machen, auch wenn jemand, der nicht wusste, was das Programm tun wird, den Zweck verstehen.

Verwandte Themen