Java递归的问题

Java递归的问题,java,recursion,Java,Recursion,假设我有一组 Person Friend -------------------- FriendA FriendB FriendB FriendC 我想遍历列表,得到一个文件。到目前为止,我已经尝试过这个方法,但它不起作用,当我尝试其他方法时,会出现堆栈溢出错误 public class Pair { public String key; public String value; public Pair(String key, String value) {

假设我有一组

Person    Friend
--------------------
FriendA   FriendB
FriendB   FriendC
我想遍历列表,得到一个文件。到目前为止,我已经尝试过这个方法,但它不起作用,当我尝试其他方法时,会出现堆栈溢出错误

public class Pair {

public String key;
public String value;

public Pair(String key, String value)
   {
      this.key = key;
      this.value = value;
   }
}



import java.io.*;
import java.util.*;


public class OpenFile 
{

public static String checkFriend (String name, final ArrayList<Pair> pair)
{
    String new_friend_name = null;

    for (Pair p : pair)
    {
        if (p.key == name)
        {
            new_friend_name = (String) p.value;
        }
    }

    return new_friend_name;
}

public static String getUltimateFriend(String name, final ArrayList<Pair> pair)
{
    String friend = null;

    if (checkFriend(name, pair) == null) return name;
    while (checkFriend(name, pair) != null)
    {
        friend = checkFriend(name, pair);
    }

    return friend;
    //return new_friend_name;
}


public static void main(String[] args) throws Exception
{
    FileReader fr = new FileReader("C:\\Users\\Files\\Desktop\\Java Programs\\data\\data.txt");
    BufferedReader br = new BufferedReader(fr);

    String line = br.readLine();
    String[] var = null;
    ArrayList<Pair> pair = new ArrayList<Pair>();

    System.out.println("my pair output from a loop");
    for (Pair p : pair)
    {
        System.out.println(p.key + " is friends with " + getUltimateFriend(p.key,pair));    
    }

    br.close();
    fr.close();


}
公共类对{
公共字符串密钥;
公共字符串值;
公共对(字符串键、字符串值)
{
this.key=key;
这个值=值;
}
}
导入java.io.*;
导入java.util.*;
公开类开放文件
{
公共静态字符串checkFriend(字符串名称,最终ArrayList对)
{
字符串new\u friend\u name=null;
用于(对p:对)
{
如果(p.key==名称)
{
new_friend_name=(字符串)p.value;
}
}
返回新的朋友姓名;
}
公共静态字符串getUltimateFriend(字符串名称,最终ArrayList对)
{
字符串friend=null;
if(checkFriend(name,pair)==null)返回名称;
while(checkFriend(名称,对)!=null)
{
friend=checkFriend(姓名,配对);
}
回报朋友;
//返回新的朋友姓名;
}
公共静态void main(字符串[]args)引发异常
{
FileReader fr=新的FileReader(“C:\\Users\\Files\\Desktop\\Java Programs\\data\\data.txt”);
BufferedReader br=新的BufferedReader(fr);
String line=br.readLine();
字符串[]var=null;
ArrayList对=新的ArrayList();
System.out.println(“我的循环对输出”);
用于(对p:对)
{
System.out.println(p.key+”是“+getUltimateFriend(p.key,pair))的好友;
}
br.close();
fr.close();
}
}

我尝试了递归,但遇到了堆栈溢出错误




任何帮助都将不胜感激。

您不使用递归,因为方法本身没有调用的地方。 我猜你的问题在你的循环中:

while (checkFriend(name, pair) != null)
{
    friend = checkFriend(name, pair);
}

在这里,您无休止地做着同样的事情。

如果在递归版本中有类似的逻辑,这可能就是为什么会出现堆栈溢出错误-递归变为无限。异常的完整堆栈跟踪是什么?我不认为这会引发StackOverflow,因为它实际上不是递归的。这是非递归版本,您应该更清楚地说明这一点。如果上面的代码不是递归的,那么关于递归和堆栈溢出的整个问题就无关紧要了。那你的问题是什么?