我搜索了StackOverflow,试图“靠我自己”解决这个问题,但是没有运气。我认为我的toString()
方法中存在无限递归的问题,但是我不确定,因为我对此很陌生。
我认为,首先为您提供我的代码将使问题对您更清楚:
import java.util.ArrayList;
public class User{
private String name;
private ArrayList<User> friends;
private static ArrayList<User> users = new ArrayList<User>();
public User(String name){
this.name = name;
this.friends = new ArrayList<User>();
users.add(this);
}
public void addFriend(User friend){
friends.add(friend);
}
public static void connect(User user1, User user2){
user1.addFriend(user2);
user2.addFriend(user1);
}
public static ArrayList<User> getUsers(){
return users;
}
public String toString(){
return String.format("%s : %s", name, friends);
}
}
我不确定您是否可以看到我要执行的操作,但是
toString
的格式应该是这样的:名称:{friend1,friend2,friend3,...}
例如,用户“爱丽丝”和朋友“鲍勃”和“查理”将像这样打印
爱丽丝:{Bob,Charlie,}
我不太确定应该如何继续实现这一目标。任何帮助将非常感激。如果以前已经回答过这个问题,我也深表歉意,但是我不明白我之前找到的任何答案。
这是我的
main
方法,可能也有帮助:public class Main{
public static void main(String args[]){
User bob = new User("Bob");
User alice = new User("Alice");
User charlie = new User("Charlie");
User.connect(alice, bob);
User.connect(alice, charlie);
System.out.println(User.getUsers());
}
}
最佳答案
您需要遍历“朋友”列表,然后仅打印每个人的姓名。因为您要打印每个朋友,所以其中包括朋友的朋友,这就是您获得无限递归的原因。
尝试类似的东西
public String toString() {
int count = 0;
StringBuilder sb = new StringBuilder("{\"name\"=" + name + ", \"friends\"=[");
for (User friend : friends) {
sb.append(friend.getName());
if (++count < friends.size()) sb.append(", ");
}
sb.append("]}");
return sb.toString();
}
关于java - toString()中的无限递归,如何防止这种情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47444950/