1

我创建了一个人员类,具有年龄和姓名属性。我还在一个对象数组中创建了 5 个该类的实例,并且想用一个 for 循环打印出属性。我的理解是,toString当您尝试打印出一个对象时,它会被显式调用,所以我重写了它,以便toString在调用它时打印出对象的两个属性。

这是我的代码:

class Person
{
    int age;
    String name;

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


    public String toString(Person p)
    {
        return "Name: " + p.name +"Age: "+ p.age;
    }
}


public class P1Q5Bubble {

public static void main(String[] args) {

        Person [] pp = new Person [5];

        pp[0] = new Person("Andy" , 18);
        pp[1] = new Person("Lisa" , 20);
        pp[2] = new Person("Bob" , 10);
        pp[3] = new Person("Eva" , 18);
        pp[4] = new Person("Tim" , 13);       




        for(int i = 0; i> pp.length ; i++)
            System.out.println(pp[i]);
}
4

4 回答 4

4

你需要改变两件事

1) 在i > pp.lengthi < pp.length

2)toString()方法中使用System.out.printSystem.out.println没有参数,因此将其更改为类似

public String toString() {
    return "Name: " + name + "Age: " + age;
}
于 2012-06-24T19:35:24.947 回答
3

您的for循环终止条件不正确,您需要i < pp.length.

使用i > pp.length您的循环将不执行任何语句。循环只会在终止条件为 时执行true

此外,您没有toString正确覆盖:您的toString方法不应接受任何参数:您的实例变量nameage可用于函数。

于 2012-06-24T19:31:42.130 回答
1

您需要在 Person 类中覆盖的 toString() 函数不应包含任何参数(因为定义它的 Object 类不包含参数)。该功能的更正代码将是

@Override public String toString()
{
   return return "Name: " + name +"Age: "+ age;
}
于 2012-06-24T19:44:58.150 回答
0

您应该覆盖默认 toString() (不带参数),而不是添加一个新方法。因此,删除该论点并使用“this”代替人论点

于 2012-06-24T19:34:49.430 回答