2015-07-04 1 views
-4

** он показывает мне то же самое время 23 мая 1986 г. Выход ... Лицо 0: Джон Дэвидсон, 23 мая 1986 года, Белград; Лицо 1: Майкл Бартон, 23 мая 1986 года, Краков; Человек 2: Иван Перкинсон, 23 мая 1986, Москва; **Как я могу получить время для каждого имени?

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Locale; 
public class Persons { 
    public String name; 
    public String lastName; 
    public String Birthplace; 
    public static String dateBirth; 
    Persons(String name, String lastName, String Birthplace, String dateBirth) { 
      this.name = name; 
      this.lastName = lastName; 
      this.Birthplace = Birthplace; 
      Persons.dateBirth = dateBirth; 
    } 
    public String getName() { 
      return name; 
    } 

    public String getLastName() { 
      return lastName; 
    } 
    public String getPlace() { 
      return Birthplace; 
    } 
    public String getDateBirth() { 
      return dateBirth; 
    } 

    public void setDateBirth(String dateBirth) { 
    Persons.dateBirth = dateBirth; 
    } 

    public static void main(String[] args) throws ParseException { 
     SimpleDateFormat formatter = new SimpleDateFormat("dd ',' MMM yyyy", Locale.ENGLISH); 
    SimpleDateFormat parser = new SimpleDateFormat("ddMMyyyy"); 
     List<Persons> details = new ArrayList<Persons>(); 
     String text = "John.Davidson/05051988/Belgrade Michael.Barton/01011968/Krakov Ivan.Perkinson/23051986/Moscow"; 
     String[] personsSplit = text.split(" "); 
     for (int i = 0; i < personsSplit.length; i++) { 
     String[] personList = personsSplit[i].split("/"); 
     String[] print = personList[0].split("\\."); 
     Persons newPerson = new Persons(print[0], print[1], 
     personList[2], personList[1]); 
     details .add(newPerson); 
      } 
      for (int i = 0; i <details .size(); i++) { 
        String outputString = "Person " + i + ": " 
            + details .get(i).getName() + " " 
            + details .get(i).getLastName() + ", " 
            +formatter.format(parser.parse(dateBirth)) + ", " 
            + details .get(i).getPlace() + ";"; 
        System.out.println(outputString); 
      } 
    } 
} 
+0

Почему бы не 'this.dateBirth = dateBirth;'? –

+0

Вы вообще не объяснили свой вопрос. – rodit

+0

@UmaKanth, потому что dateBirth является статическим свойством без причины. – MCMastery

ответ

0

Переменная dateBirth является статическим. Это означает, что всякий раз, когда он изменяется на одного человека, он изменяется и на всех других людей. У последнего человека есть дата рождения 23 мая 1968 года, поэтому, поскольку в последний раз изменена переменная, это то, что у всех людей есть их дата рождения.

Fix:

  1. Удалить static из public static String dateBirth.

  2. Изменить все экземпляры Person.dateBirth на this.dateBirth.

  3. Чтобы исправить ошибку, Cannot make a static reference to the non-static field dateBirth, изменить dateBirth в вас main метод details.get(i).getDateBirth().

Вашего окончательный код должен быть:

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Locale; 
public class Persons { 
    public String name; 
    public String lastName; 
    public String Birthplace; 
    public String dateBirth; 
    Persons(String name, String lastName, String Birthplace, String dateBirth) { 
     this.name = name; 
     this.lastName = lastName; 
     this.Birthplace = Birthplace; 
     this.dateBirth = dateBirth; 
    } 
    public String getName() { 
     return name; 
    } 

    public String getLastName() { 
     return lastName; 
    } 
    public String getPlace() { 
     return Birthplace; 
    } 
    public String getDateBirth() { 
     return dateBirth; 
    } 

    public void setDateBirth(String dateBirth) { 
     this.dateBirth = dateBirth; 
    } 

    public static void main(String[] args) throws ParseException { 
     SimpleDateFormat formatter = new SimpleDateFormat("dd ',' MMM yyyy", Locale.ENGLISH); 
     SimpleDateFormat parser = new SimpleDateFormat("ddMMyyyy"); 
     List<Persons> details = new ArrayList<Persons>(); 
     String text = "John.Davidson/05051988/Belgrade Michael.Barton/01011968/Krakov Ivan.Perkinson/23051986/Moscow"; 
     String[] personsSplit = text.split(" "); 
     for (int i = 0; i < personsSplit.length; i++) { 
      String[] personList = personsSplit[i].split("/"); 
      String[] print = personList[0].split("\\."); 
      Persons newPerson = new Persons(print[0], print[1], 
        personList[2], personList[1]); 
      details .add(newPerson); 
     } 
     for (int i = 0; i <details .size(); i++) { 
      String outputString = "Person " + i + ": " 
        + details .get(i).getName() + " " 
        + details .get(i).getLastName() + ", " 
        +formatter.format(parser.parse(details .get(i).getDateBirth())) + ", " 
        + details .get(i).getPlace() + ";"; 
      System.out.println(outputString); 
     } 
    } 
} 

Надеется, что это помогает!

2

Вы сделали это право в течение первых 3-х переменных, но тогда вы решили пойти на статической переменной (что означает, что он делил между всеми экземпляры Лица). Просто измените dateBirth декларацию:

public String dateBirth; 

И в конструкторе, вместо Persons.dateBirth сделать это, как и другие переменные, а также:

this.dateBirth = dateBirth; 
+0

, но дайте мне ошибку здесь formatter.format (parser.parse (dateBirth)) (нестационарная переменная dateBirth не может ссылаться на статический контекст) –

Смежные вопросы