Java 递归地获取列表的元素
我正在做一个项目,我遇到了以下问题 我有一个Java 递归地获取列表的元素,java,recursion,arraylist,Java,Recursion,Arraylist,我正在做一个项目,我遇到了以下问题 我有一个Client对象,它包含一个ArrayList链接属性。 客户端可以链接到其他客户端。链接的Client的Client存储在此列表中(形成一种图形) 由于对linked属性的递归调用,我想创建一个能够返回所有客户机的方法 这是我的代码: public class Client implements Serializable{ String name; String ipAddress; ArrayList<
Client
对象,它包含一个ArrayList
链接属性。
客户端
可以链接到其他客户端
。链接的Client
的Client
存储在此列表中(形成一种图形)
由于对linked属性的递归调用,我想创建一个能够返回所有客户机的方法
这是我的代码:
public class Client implements Serializable{
String name;
String ipAddress;
ArrayList<Client> linked;
//Constructor
public Client(String name, String ipAddress)
{
this.name=name;
this.ipAddress=ipAddress;
linked=new ArrayList<Client>();
}
public void addInList(Client c)
{
linked.add(c);
}
}
公共类客户端实现可序列化{
字符串名;
字符串地址;
ArrayList链接;
//建造师
公共客户端(字符串名称、字符串IP地址)
{
this.name=name;
this.ipAddress=ipAddress;
linked=newarraylist();
}
公共无效附加列表(客户端c)
{
添加(c);
}
}
我的递归方法是:
public ArrayList<Client> getAllClient(ArrayList<Client> list)
{
for(Client c : linked)
{
if(!linked.contains(c))
{
linked.add(c);
getAllClient(list);
}
}
return list;
}
公共ArrayList getAllClient(ArrayList列表)
{
用于(客户端c:链接)
{
如果(!linked.contains(c))
{
添加(c);
getAllClient(列表);
}
}
退货清单;
}
我知道这是一个基本问题,但我找不到解决办法。最好的方法是什么?将参数添加为
outputList
,以便能够跟踪递归中已添加到列表中的客户端。它将添加所有原始客户端和链接到原始列表的所有客户端,依此类推
public ArrayList<Client> getAllClients(List<Client> outputList, List<Client> list) {
for (Client client : list) {
if (!outputList.contains(client)) {
getAllClients(outputList, client.getLinked());
outputList.add(client);
}
}
return outputList;
}
public ArrayList getAllClients(List outputList,List List){
用于(客户端:列表){
如果(!outputList.contains(客户端)){
GetAllClient(outputList,client.getLinked());
outputList.add(客户端);
}
}
返回输出列表;
}
问题出在哪里?有些东西不起作用?它是否应该是getAllClient方法中的c.getAllClient(list)?当我测试我的方法时,它返回一个空列表。是的,我忘了添加c.getAllClient(列表)谢谢!最好随代码一起发布一点说明,而不是只发布代码。@McEmperon来了:)你对我来说太快了