user3241721
user3241721

Reputation: 143

How do I create a toString method for an ArrayList of objects?

I am tasked with creating a toString() method for each and every object in an ArrayList. I have no idea how to go about doing this. This is the class with the ArrayList

public class DogManager {
    private ArrayList<Dog> dogList;

    public DogManager() {
        this.dogList = new ArrayList<Dog>();
    }

    public void addDog(String nameOfDog) {
        this.dogList.add(new Dog(nameOfDog));
    }

    public String toString() {
        String results = "+";
        for (int i = 0; i < this.dogList.size(); i++) {
            results += " " + this.dogList.get(i);
        }
        return results;
    }
}

I know the toString() is wrong, but I can't figure out how to make it return a description for each of the objects in that list.

Upvotes: 4

Views: 35511

Answers (6)

Solace
Solace

Reputation: 2189

public String toString(){
    String toReturn = "[";

    for(Dog currentDog: dogList){
        toReturn+=currentDog.toString()+",";
    } 
    toReturn = toReturn.substring(0,toReturn.length()-1);

    return toReturn+"]";
}

Upvotes: 0

user2046264
user2046264

Reputation:

I would do something like this, no need to loop through the list of dogs (a List.toString already does that for you).

public class Dog {
    private String name;

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


public class DogManager {
    private List<Dog> dogs;

    @Override
    public String toString() {
        return "DogManager{dogs=" + dogs + "}";
    }
}

Upvotes: 2

Warlord
Warlord

Reputation: 2826

You need to define .toString() method in your Dog class and make it override the default .toString() method of Object class.

public class Dog {

String name;
String age;
String race;

@Override
public String toString() {

    return String.format("Name: %s, Age: %s, Race: %s", name, age, race);
}
}

Then you can simply call System.out.println(dog) for each element of the array and your custom text defined in dog's .toString() method will be displayed.

Upvotes: 0

RMachnik
RMachnik

Reputation: 3694

public String toString() {
    String results = "";
    for(Dog d : dogList) {
        results += "," + d.toString();
    }
    return results;
  }
}

Upvotes: 0

Jurko Guba
Jurko Guba

Reputation: 638

An arraylist is a dynamic array filled with Objects. Why don't you overwrite the toString method in the Dog class.

Upvotes: 0

telkins
telkins

Reputation: 10550

You are close. The easiest way I can think of is to also implement toString() for Dog. Then in your DogManager class you can loop through each Dog and call its toString().

ie:

public String toString() {
    String results = "+";
    for(Dog d : dogList) {
        results += d.toString(); //if you implement toString() for Dog then it will be added here
    }
    return results;
  }
}

edit: You can also format it however you like. I notice some answers separate each Dog by ","

Upvotes: 6

Related Questions