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,因为它实际上不是递归的。这是非递归版本,您应该更清楚地说明这一点。如果上面的代码不是递归的,那么关于递归和堆栈溢出的整个问题就无关紧要了。那你的问题是什么?