簡體   English   中英

返回新實例的靜態方法?

[英]Static method that returns a new instance?

我受命制作一個靜態方法:“ createPerson –此方法根據名字,姓氏,名字和年齡創建一個新人。然后返回該人的新實例。”

但是由於我們只是學習靜態方法,所以我很困惑。

這是驅動程序類:

public class FriendlyPeople {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Let's meet some friendly people");
    Person[] people =
            {
                    new Person("Tom Jones", 29),
                    new Person("Bob Jones", 40),
                    new Person("Alf Pererdur", 10),
                    new Person("Ripley Carver",20),
                    new Person("Britton Raven",47),
                    new Person("Joyce Elihu",93),
                    new Person("Kevin Jody",63),
                    new Person("Ben Jayce", 32),
                    new Person("Emerson Ezra",27),
                    new Person("Yorick Fearghal",44),
                    new Person("Kim Yori",23),
                    new Person("Sheldon Ambrose", 36),
                    new Person("Leonard Damion",33),
                    new Person("Agam Saburou", 53),
                    new Person ("Webster Chaz", 46),
                    new Person("Carol Dudel", 31)
            };
    Person p1 = new Person("Dacre Casey", 29);
    System.out.println("Testing the initial person");
    System.out.println(p1.toString());
    System.out.println();


    System.out.println("Adding one friend");
    p1.addFriend(Person.createPerson("Wetzel Edmund", 62));
    p1.printFriends();
    System.out.println();

    System.out.println("Adding a new friend using the overloaded operator");
    p1.addFriend("Judith Katheryne", 32);
    p1.printFriends();
    System.out.println();

    System.out.println("Adding a group of friends that exceeds the number of friends.");
    p1.addFriends(people);
    p1.printFriends();
    System.out.println();

    System.out.println("Removing a friend "+people[0].toString());
    p1.removeFriend(people[0]);
    p1.printFriends();
    System.out.println();


}

到目前為止,這是我的代碼:

public class Person {
private String name;
private int age;
private Person[] friends;

//Constructor for person
public Person(String name, int age)
{
    this.name = name;
    this.age = age;
}
//Constructor array for person
public Person()
{
    this.friends = new Person[10];
}

//Accessors
public String getName() {return name;}

public int getAge() {return age;}

//Mutators
public void setName (String name)
{
    this.name = name;
}

public void setAge (int age)
{
    if (age < 0)
    {
        System.out.println("That is an invalid age");
        return;
    }
    this.age = age;
}

//Methods

public static String createPerson (String s)
{

}

public String toString() { return name + " " + age; }

public boolean equals (Person person) {
    return this.name.equalsIgnoreCase(person.getName()) && this.age == person.getAge();
}

//Add friend method
public void addFriend(Person person)
{
    for (int column = 0; column < friends.length; column++)
    {
        if (friends[0] != null || (friends[column] == null && friends[column-1] != null))
        {
            friends[column] = person;
        }
        if (friends[9] == person) {
            System.out.println("Friends list is full!");
        }
    }
}

這是我要特別找出的方法,可能很簡單:

public static String createPerson (String s)
{

}

此時,請注意,靜態方法未與實例化的類關聯。 調用靜態方法:

    Person.createPerson("first", "last", 20);

注意,調用的是使用類名的方法,而不是引用Person類型的對象的變量。 要創建方法,請像以前一樣使用“靜態”一詞。 從靜態方法,您不能訪問Person的非靜態類字段。 與其他方法一樣,將邏輯放在靜態方法中。 沒有判斷任何其他代碼,說明正在告訴您執行以下操作:

    public static Person createPerson (String first, String last, int age)
    {
        return new Person(first, last, age);
    }

首先,如果您使用的是Factory(靜態初始值設定項),則應將實例設置為私有。

其次,您應該在兩個構造函數上實例化好友列表,或者應該使用this(); 獲取另一個構造函數(這稱為重載),但是我建議您使用ArrayList。 如果您不知道如何使用它,請使用變量來跟蹤要使用多少指針作為指針。

我強烈建議您研究收集框架。 數組List可以很輕松地完成您想要的工作。

第三,如果要添加已經存在的朋友,則應從獲得的列表中獲取它。 如果不存在,則應將其添加到列表中。 我建議使用HashMap,但是ArrayList就足夠了。 在這里,它是您的代碼的重新調制:

public class FriendlyPeople {

    public static void main( String[] args ) {
        // TODO Auto-generated method stub
        System.out.println("Let's meet some friendly people");
        ArrayList<Person> people = new ArrayList<Person>();
        Person[] peopleList = {
            Person.createPerson( "Tom Jones", 29),
            Person.createPerson( "Bob Jones", 40),
            Person.createPerson( "Alf Pererdur", 10),
            Person.createPerson( "Ripley Carver",20),
            Person.createPerson( "Britton Raven",47),
            Person.createPerson( "Joyce Elihu",93),
            Person.createPerson( "Kevin Jody",63),
            Person.createPerson( "Ben Jayce", 32),
            Person.createPerson( "Emerson Ezra",27),
            Person.createPerson( "Yorick Fearghal",44),
            Person.createPerson( "Kim Yori",23),
            Person.createPerson( "Sheldon Ambrose", 36),
            Person.createPerson( "Leonard Damion",33),
            Person.createPerson( "Agam Saburou", 53),
            Person.createPerson( "Webster Chaz", 46),
            Person.createPerson( "Carol Dudel", 31)
        };

        people.ensureCapacity( peopleList.length );

        for ( int i = 0 ; i < peopleList.length ; i++ ) {
            people.add( peopleList[i] );
        }

        Person p1 = Person.createPerson( "Dacre Casey", 29);
        people.add( p1 );
        System.out.println("Testing the initial person");
        System.out.println(p1.toString());
        System.out.println();


        System.out.println("Adding one friend");
        Person newPerson1 = Person.createPerson("Wetzel Edmund", 62);
        people.add( newPerson1 );
        p1.addFriend( newPerson1 );
        p1.printFriends();
        System.out.println();

        System.out.println("Adding a new friend using the overloaded operator");
        Person newPerson2 = Person.createPerson( "Judith Katheryne", 32);
        people.add( newPerson2 );
        p1.addFriend( newPerson2 );
        p1.printFriends();
        System.out.println();

        System.out.println("Adding a group of friends that exceeds the number of friends.");
        p1.addFriends(people);
        p1.printFriends();
        System.out.println();

        Person friendToRemove = people.get( 0 );
        //You don't need to explicit .toString
        System.out.println("Removing a friend "+friendToRemove);
        p1.removeFriend( friendToRemove );
        p1.printFriends();
        System.out.println();

    }
}

至於Person類:

public class Person {
    private String name;
    private int age;
    private ArrayList<Person> friends;

//Constructor for person
    private Person(String name, int age) {
        this();
        this.name = name;
        this.age = age;

    }
//Constructor array for person
    private Person() {
        this.friends = new ArrayList<Person>(10);
    }
    //Accessors
    public String getName() {return name;}

    public int getAge() {return age;}

//Mutators
    public void setName (String name) {
        this.name = name;
    }

    public void setAge (int age) {
        if (age < 0) {
            System.out.println("That is an invalid age");
            return;
        }
        this.age = age;
    }

//Methods

    @Override
    public String toString() { return name + " " + age; }

    public boolean equals (Person person) {
        return this.name.equalsIgnoreCase(person.getName()) && this.age == person.getAge();
    }

//Add friend method
    public void addFriend(Person person) {
        friends.add( person );
    }

    public void addFriends( ArrayList<Person> people ) {
        friends.addAll( people );
    }

    public void addFriends( Person[] people ) {
        for ( int i = 0 ; i < people.length; i++ ) {
            Person friend = people[i];
            friends.add( friend );
        }
    }

    //To remove over an ArrayList I advice using an Iterator, but for now 
    //this is enought
    public void removeFriend(Person friend ) {
        for ( int i = 0 ; i < friends.size(); i++ ) {
            Person person = friends.get( i );
            if( person.equals(friend) ){
                friends.remove( i );
            }
        }
    }

    public void printFriends() {
        System.out.println( "Friends: " );
        for ( int i = 0 ; i < friends.size() ; i++ ) {
            System.out.println( friends.get( i ) );
        }
    }

    //I advise to leave static methods to the end. It leaves the code cleaner.
    public static Person createPerson ( String name, int age ) {
        return new Person( name, age );
    }

    public static Person createPerson () {
        return new Person();
    }
}

再次,我建議您研究集合框架。 但是,沒有它也可以做這件事。 您可以使用一個簡單的數組來完成您想做的事情,但是您應該使用一個變量來跟蹤朋友的數量(用作指針)。 當指針達到數組長度時,只需執行以下操作:

private void increaseListLenght() {
    Person[] newFriendList = new Person[friends.lenght*1.75];
    for ( int i = 0 ; i < friends.lenght ; i++ ) {
        newFriendList[i] = friends[i];
    }
    friends = newFriendList;
}

但是,如果您選擇以這種方式進行操作,則無法將列表定為final

我希望能有所幫助。

祝你今天愉快。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM