如何为 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,打印出来。
我很难找到如何编写我的 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,打印出来。