如何为 ArrayList 编写 toString 方法?

How to write a toString method for ArrayList?

我很难找到如何编写我的 toString 方法来获取程序中每个熊的输出。我希望输出显示 "Race - Points - TotalPoints"。但是即使其余代码似乎可以编译,也无法正确处理。

我是否需要在两个 classes 中都定义 toString 或者我缺少什么?我检查了其他几个类似的问题,这似乎是一个替代方案?但如何最有效地实施呢?

先关熊class:

import java.util.ArrayList;

public class Bear {

    public static void main(String[] args) {

        Bear b = new Bear("Sebastian", 100, "Brownbear");
        ArrayList <Bear> bears = new ArrayList<Bear>();
        bears.add(b);

    }

    private String name;
    private int points;
    private String race;


    public Bear(String name, int points, String race) {
        this.name = name;
        this.points = points;
        this.race = race;
    }

    public String getName() {
        return name;
    }

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

    public String getRace() {
        return race;
    }

    public void setRace(String race) {
        this.race = race;
    }

    public int getInitialPoints() {
        return points;
    }

    public int getPoints() {
        int oldPoints = points;
        points /= 2;
        return oldPoints;
    }
}

其次是 BearCollection class:

import java.util.ArrayList;

public class BearCollection {

    ArrayList <Bear> bears = new ArrayList<Bear>();

     int totalPoints = 0;

    public void add (Bear b) {

        for (Bear inCollection : bears) {
            if(b.getName().equals(inCollection.getName())) {
                return;
            }
        }

        for (Bear inCollection : bears)
        if (b.getRace().equals(inCollection.getRace())) {

            for(int i =  bears.size(); i > 0; i --) {
                if(bears.get(i).getRace().equals(b.getRace())) {
                    b.getPoints(); 
                    i = 0;
                } 
            }
        }

        totalPoints += b.getInitialPoints();


        bears.add(b) ;
    }

public String toString(){

    return ;
}

覆盖 Bear class 中的 toString 将解决问题。

如您所知,只需重写 toString 方法即可。为了提高性能,请使用 StringBuilder,而不是字符串连接。

import java.util.*;

public class ans{
    public static void main(String[] args){
    Bears bears = new Bears();
    bears.add(new Bear());
    bears.add(new Bear());
    bears.add(new Bear());

    System.out.println(bears);
    }
}

class Bear{
    public String toString(){
    return "I am a bear";
    }
}

class Bears{
    private ArrayList<Bear> bears = new ArrayList<Bear>();

    public void add(Bear bear){
    bears.add(bear);
    }

    public String toString(){
    StringBuilder str = new StringBuilder();
    if(!bears.isEmpty()){ // If there is no bears, return empty string
        str.append(bears.get(0)); // Append the first one
        for(int index = 1; index < bears.size(); index++){ // For all others
        str.append(" - "); // Append a separator and the bear string
        str.append(bears.get(index));
        }

    }
    return str.toString();
    }
}

编辑 要打印 A-B-C-D,只需将每个项目与一个分隔符关联,一个除外。 A(-B)(-C)(-D) 或 (A-)(B-)(C-)D。您可以轻松添加开始和结束标记。

如果您需要打印出 Bear 的整个集合,您需要为 Bear 提供一个 toString,类似于:

return "Bear("+name+","+points+","+race+")";

然后,在 BearCollection 的 toString 中,只需为 toString 中的每个循环编写一个循环,并在集合中的每个熊上调用 toString,打印出来。