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

2つのことを変更する必要があります

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メソッドは引数を取るべきではありません。インスタンス変数nameでありage、関数で使用できます。

于 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() (引数なし) をオーバーライドする必要があります。したがって、その引数を削除して、 person 引数の代わりに「this」を使用します

于 2012-06-24T19:34:49.430 に答える