【问题标题】:How to write a toString method for ArrayList?如何为 ArrayList 编写一个 toString 方法?
【发布时间】:2017-02-13 22:44:51
【问题描述】:

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

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

首先关闭熊类:

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 类:

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 ;
}

【问题讨论】:

  • 恕我直言,您并没有认真告诉我们您在使用 return ; 时遇到问题,是吗?
  • 当然我知道我的 tostring 是完全空白的,我只是不明白我应该放什么以获得正确的输出。我只是把 toString 方法放在那里,以显示我认为它应该去的地方。 (但我是一个完整的初学者)
  • 您已经知道如何遍历您的熊列表,因为您已经在代码中这样做了。那么是什么阻止了你迭代它并从当前的熊迭代中打印你想要的任何信息呢?
  • 您是否遇到了一些具体问题?还是您要求我们为您编写代码?

标签: java arraylist tostring


【解决方案1】:

正如您所说,只需覆盖 toString 方法。为了提高性能,请使用 StringBuilder,而不是 String 连接。

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。您可以轻松添加开始和结束标记。

【讨论】:

  • 感谢您的帮助和时间!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果您需要打印出整个 Bears 集合,则需要给 Bear 一个 toString,类似于:

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

    然后,在 BearCollection 的 toString 中,只需要在 toString 中编写一个 for each 循环来遍历,然后在集合中的每个熊上调用 toString,将它们打印出来。

    【讨论】:

      猜你喜欢
      • 2013-07-12
      • 2014-05-04
      • 2015-02-26
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 2012-10-13
      相关资源
      最近更新 更多