我刚刚开始将面向对象编程作为课程的一部分,但我正在努力解决它,特别是Person类中的toString方法。我需要编写一个toString()方法来显示实例变量的内容。
我需要打印样本:
Person[forName=joe, surname= smith, age= 25, height= 1.57, gender= male]
我还需要使用format方法格式化它:
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()方法打印的字符串像第二次引用一样。
我是否走在正确的轨道上,无论如何,我该如何解决这个问题?
编辑:我看过Person Class并且已经用它完成了它,它看起来足够好吗?我将尝试一起使用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;
}
}
编辑2:开始上课测试员,但我再次遇到有关安装者没有错误的错误;而不是一个声明。
到目前为止,测试人员在这里:
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 :(得分:0)
首先,您必须注意到您创建的每个对象都扩展了Object类。这个Object类包含像toString,equals,hashCode这样的方法......
你的对象也有这个方法(继承自Object)。当你覆盖(你应该用@Override注释这个方法)时,例如。 toString你总是使用这个toString方法而不是继承的方法。它叫做多态。你的toString方法看起来很好。在你的main方法中,你应该在所有Persons中使用某种循环,并在那里格式化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;
}
答案 1 :(得分:0)
如前所述,你的toString()很好。
请注意,toString()方法和format()方法是IMO应该独立工作,因为它们用于不同的目的。
我建议不要将格式方法放在person类中(或者至少使它成为静态方法)。这是因为单个Person实例没有足够的信息以表格格式打印。它至少需要知道列宽。否则你最终会得到这样的东西:
smith joe 25 1.57 male
someVeryLongFirstName sian 18 1.73 female
*** *** *** *** ***
因此格式化方法应该列出应该打印出来的人员,然后首先计算列宽。完成此操作后,您只需将属性值pad添加到列宽并打印出来。
答案 2 :(得分: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;
}
并在main方法中创建对象:
Person p = new Person("Nillas", 25);
在创建对象并查看结果后,您始终可以在主类中运行toString()方法:
System.out.println(p.toString());
希望这有帮助,祝你好运!