尝试使用我制作的 toString 方法打印出一个对象,得到我认为是 hashCode 的东西?如何输出字符串?
Trying to print out a object with a toString method I made, getting what I believe to be is hashCode? How do I output a String?
所以我目前正在尝试从存储所有数据的对象数组中打印我的对象(在本例中为 Person、Student、Employee 或 hourlyEmployee)。数组本身工作正常,但是当我尝试打印一个 Person 对象时,例如在这种情况下,一个名为 billy 的学生,然后由一个字符串名称、int 社会安全号码、int 年龄、字符串性别、字符串地址组成, int telephone, double GPA, String Major, 和 int yearOfGraduation 的顺序,它确实正确地打印出了信息。以下是我创建对象的方式:
private Person billy = new Student("Billy", 111111111, 19, "Male", "404 Test Ave S", 1111111111, 4.0, "Business and Economics", 2018);
这是我在 Student class 中创建的 toString 方法,它继承自父 class Person:
public String toString(String name, int ssn, int age, String gender, String address, int telephone, double GPA, String major, int grad){
String superResult = super.toString(name, ssn, age, gender, address, telephone);
String result = "\nGPA: " + GPA + "\nMajor: " + major + "\nGraduation Year: " + grad;
return superResult + result;
}
最后是我尝试用数组输出它的方式:
for(int i = 0; i < user.getPeople().length; i++){
String string = user.getPeople()[i].toString();
System.out.println(string);
}
在这种情况下,它应该遍历数组,并打印出数组中的所有值。我不认为它与 for 循环本身有关,而是与我将对象的值转换为字符串格式的方式有关。
有没有一种方法可以将 hashCode 转换为预期的字符串,或者有一种方法可以首先将其作为普通字符串打印出来?
您创建了一个不同的 toString
方法,它有很多参数,而不是您调用的 Person
从 Object
继承的没有参数的方法。 Object
版本负责您看到的输出。
从您的 toString
方法中删除所有这些参数,并使用 Person
class 的实例变量构造您要返回的字符串。此外,在方法上使用 @Override
注释,以确保您真正重写了一个方法。
Object class 中的 toString 覆盖方法不带参数,但你的有:
public String toString(String name, int ssn, int age, String gender, String
address, int telephone, double GPA, String major, int grad) {
//....
}
正确的签名是:
@Override
public String toString() {
// your code here
}
重写方法时不要忘记 @Override
注释,因为这会让编译器在您出错时告诉您(就像您在上面一样)。
您完成了方法重载而不是方法覆盖。您需要覆盖对象的方法 toString() 才能实现此目的。
所以我目前正在尝试从存储所有数据的对象数组中打印我的对象(在本例中为 Person、Student、Employee 或 hourlyEmployee)。数组本身工作正常,但是当我尝试打印一个 Person 对象时,例如在这种情况下,一个名为 billy 的学生,然后由一个字符串名称、int 社会安全号码、int 年龄、字符串性别、字符串地址组成, int telephone, double GPA, String Major, 和 int yearOfGraduation 的顺序,它确实正确地打印出了信息。以下是我创建对象的方式:
private Person billy = new Student("Billy", 111111111, 19, "Male", "404 Test Ave S", 1111111111, 4.0, "Business and Economics", 2018);
这是我在 Student class 中创建的 toString 方法,它继承自父 class Person:
public String toString(String name, int ssn, int age, String gender, String address, int telephone, double GPA, String major, int grad){
String superResult = super.toString(name, ssn, age, gender, address, telephone);
String result = "\nGPA: " + GPA + "\nMajor: " + major + "\nGraduation Year: " + grad;
return superResult + result;
}
最后是我尝试用数组输出它的方式:
for(int i = 0; i < user.getPeople().length; i++){
String string = user.getPeople()[i].toString();
System.out.println(string);
}
在这种情况下,它应该遍历数组,并打印出数组中的所有值。我不认为它与 for 循环本身有关,而是与我将对象的值转换为字符串格式的方式有关。
有没有一种方法可以将 hashCode 转换为预期的字符串,或者有一种方法可以首先将其作为普通字符串打印出来?
您创建了一个不同的 toString
方法,它有很多参数,而不是您调用的 Person
从 Object
继承的没有参数的方法。 Object
版本负责您看到的输出。
从您的 toString
方法中删除所有这些参数,并使用 Person
class 的实例变量构造您要返回的字符串。此外,在方法上使用 @Override
注释,以确保您真正重写了一个方法。
Object class 中的 toString 覆盖方法不带参数,但你的有:
public String toString(String name, int ssn, int age, String gender, String
address, int telephone, double GPA, String major, int grad) {
//....
}
正确的签名是:
@Override
public String toString() {
// your code here
}
重写方法时不要忘记 @Override
注释,因为这会让编译器在您出错时告诉您(就像您在上面一样)。
您完成了方法重载而不是方法覆盖。您需要覆盖对象的方法 toString() 才能实现此目的。