2015-02-05 1 views
0

Я только начал делать объектно-ориентированное программирование как часть своего курса, но я борюсь с ним, в частности метод toString в классе Person. Мне нужно написать метод toString() для отображения содержимого переменных экземпляра.Объектно-ориентированное программирование. Как использовать метод и формат toString()?

мне нужно по образцу печатать:

Person[forName=joe, surname= smith, age= 25, height= 1.57, gender= male] 

мне также нужно отформатировать его, как это с помощью метода формата:

smith joe 25 1.57 male 
davis sian 18 1.73 female 
***  *** *** *** *** 

Я нету письменного тестера еще, но вот что Я написал до сих пор для этого класса, и теперь я застрял, я даже не уверен, что неправильно интерпретирую инструкцию toString. Я использую Netbeans для этого:

public class Person 
{ 
    private String surname; 
    private String forname; 
    private int age; 
    private double height;   
    private String gender; 

    public String toString() 
    { 
    return getClass().getName() + "[surname= " + surname + " forname= " + forname + " age= " + age + " height= " + height + " gender " + gender + "]"; 
    } 
} 

Что мне нужно сделать, это класс с именем Person, что я могу проверить. Он должен иметь возможность удерживать пять переменных выше (фамилия и т. Д.) Для разных людей. Мне нужно иметь возможность распечатывать каждую переменную экземпляра с помощью метода toString() и использовать метод format() для создания строки с информацией форматирования для форматирования строки, напечатанной методом toString() как вторая цитата.

Я нахожусь на правильном пути и независимо от того, как я могу это преодолеть?

EDIT: Я посмотрел на класс Person и сделал все, что с ним можно, это выглядит достаточно прилично? Я собираюсь попробовать вместе с PersonTester.

public class Person 
{ 
    private String surName; 
    private String forName; 
    private int age; 
    private double height; 
    private String gender; 

@Override 
public String toString() 
{ 
    return getClass().getName() + "[surName= " + surName + " forName= " + forName + " age= " + age + " height= " + height + " gender " + gender + "]"; 
} 

public void format() 
{ 
    System.out.format("%10s%10s%10d%10f%10s", "surName", "forName", age, height, "gender"); 
} 

public String getSurName() 
{ 
    return surName; 
} 

public String getForName() 
{ 
    return forName; 
} 

public int getAge() 
{ 
    return age; 
} 

public double getHeight() 
{ 
    return height; 
} 

public String getGender() 
{ 
    return gender; 
} 

public void setSurName(String surName) 
{ 
    this.surName = surName; 
} 

public void setForName(String forName) 
{ 
    this.forName = surName; 
} 

public void setAge(int age) 
{ 
    this.age = age; 
} 

public void setHeight(double height) 
{ 
    this.height = height; 
} 

public void setGender(String height) 
{ 
    this.gender = gender; 
} 

}

EDIT 2: Начало работы на класс Tester, но я снова нарваться ошибки о сеттер не имеющие; и не является заявлением.

Вот тестер до сих пор:

public class PersonTester 
{ 
public static void main(String[] args) 
{ 
    System.out.println("PersonClassTester"); 
    System.out.println("*****************"); 
    System.out.println(""); 

    Person joeSmith = new Person(); 
    String "smith" = joeSmith.setSurName(); 
    String "joe" = joeSmith.setForName(); 
    int 25 = joeSmith.setAge(); 
    double 1.57 = joeSmith.setHeight(); 
    String "male" = joeSmith.setGender(); 

    joeSmith.toString(); 
    joeSmith.format(); 
} 
} 
+0

Ваш метод toString кажется мне прав. Для форматирования проверьте это: http://docs.oracle.com/javase/tutorial/essential/io/formatting.html – Stultuske

+0

Непонятно, что спрашивать. Можете ли вы добавить лучший пример и то, что вы программируете. – Jens

+0

Отредактировано объяснение, если вы все еще не понимаете, о чем я говорю, я попробую и настрою его больше. – SIHB007

ответ

0

Прежде всего, вы должны заметить, что каждый объект создается расширяет класс Object. Этот класс Object содержит такие методы, как toString, equals, hashCode ... ваш объект также имеет эти методы (унаследованные от Object). Когда вы переопределяете (вы должны аннотировать этот метод с помощью @Override), например. toString вы всегда будете использовать этот метод toString вместо унаследованного. Его называют полиморфизмом. Метод toString выглядит отлично. В вашем основном методе вы должны использовать какой-то цикл для всех лиц и форматировать вывод из метода toString. У вас есть ошибка в вашем коде public String toString(); {

удалить; после того, как()

public class Main { 

    public static void main(String[] args) { 

     Person a = new Person("smith", "joe", 25, 1.57, "male"); 
     Person b = new Person("davis", "sian", 18, 1.73, "female"); 

     List<Person> persons = new ArrayList<Person>(); 
     persons.add(a); 
     persons.add(b); 

     for(Person p : persons){  
      System.out.format("%s %s %s %d %.2f %s", p.getClass().getName(), p.getSurname(), p.getForname(), p.getAge(), p.getHeight(), p.getGender()); 
      System.out.println(); 
     } 
    } 
} 

Если вы называете эту

System.out.println(p.toString()); 

, чем вы будете получить человека с помощью метода ToString.

Я просто изменить свой класс Person и добавьте конструктор и geters + seters

public Person(String surname, String forname, int age, double height, 
     String gender) { 
    super(); 
    this.surname = surname; 
    this.forname = forname; 
    this.age = age; 
    this.height = height; 
    this.gender = gender; 
} 

Вот geter и Seter образец.

public String getSurname() { 
     return surname; 
    } 

public void setSurname(String surname) { 
     this.surname = surname; 
    } 
+0

Я использовал переопределение, но клиент NetBeans все еще проверяет ошибки в отношении тела отсутствующего метода или требует объявления абстрактного объявления. – SIHB007

+0

Хорошо, ошибки больше нет, я начну искать метод формата. – SIHB007

0

Как уже упоминалось, ваш toString() в порядке.

Обратите внимание, что метод toString() и метод format() - это ИМО, которые должны работать независимо, поскольку они служат для разных целей.

Я предлагаю использовать метод формата не в классе person (или хотя бы сделать его статическим методом). Это связано с тем, что для экземпляра одного Person недостаточно информации для его печати в формате таблицы. По крайней мере, он должен знать ширину столбцов. В противном случае вы могли бы в конечном итоге с чем-то вроде этого:

smith joe 25 1.57 male 
someVeryLongFirstName sian 18 1.73 female 
***  *** *** *** *** 

Так метод формат должен принимать список лиц, которые должны быть распечатаны, а затем первым вычислить ширину столбцов. После этого вы получите только pad значение свойства в ширину столбца и распечатайте его.

0

Вы на правильном пути:

Внутри класса Person вам нужно добавить открытые методы для каждой частной переменной, чтобы установить данные:

public void setAge(int age) { 
    this.age = age; 
} 

Затем вы можете создать объект Person в ваш главный класс и установить его возраст:

public class Main { 
    public static void main(String[] args) { 
     Person p = new Person(); 
     p.setAge(15); 
    } 
} 

в качестве альтернативы, вы можете использовать конструктор внутри вашего класса Person, чтобы установить переменные ваш объект:

public Person(String surname, int age) { 
    this.surname = surname; 
    this.age = age; 
} 

И создать объект в основной метод, как это:

Person p = new Person("Nillas", 25); 

Вы всегда можете запустить метод ToString() в главном классе после того, как вы создали объект и увидеть результат:

System.out.println(p.toString()); 

Надеюсь, это поможет, удачи!

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