2017-04-02 65 views
0

比方说,我有问题与Java递归

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(); 


} 

}

我试图递归,但我正在逐渐StackOverflow的错误。



任何帮助,将不胜感激。

+0

异常的完整堆栈跟踪是什么?我不希望这会抛出一个StackOverflow,因为它实际上不是递归的。 – Carcigenicate

+0

我没有改变它从递归。这是非递归版本 – Srinivas

+0

你应该更清楚。如果上面的代码不是递归的,那么关于递归和堆栈溢出的问题的整个部分是不相关的。那你甚至还有什么问题? – Carcigenicate

回答

0

你不使用递归,因为无处不在调用自己。 我猜你的问题是在循环:

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

这里你无休止地做同样的事情。

+0

如果你在递归版本中有类似的逻辑,那可能是你为什么得到堆栈溢出错误 - 递归变成无限。 –