【发布时间】:2016-06-07 17:48:15
【问题描述】:
我正在尝试查找给定字符串的所有子集。例如,字符串“Rum”将具有子集“rum”、“ru”、“rm”、“r”、“um”、“u”、“m”和“”。 到目前为止,这是我的代码:
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
public class SubsetGenerator
{
private String word;
public SubsetGenerator(String in)
{
word=in;
}
public ArrayList<String> findSubsets()
{
ArrayList<String> subsets = new ArrayList<String>();
String temp = word;
if(temp.length()==1)
{
subsets.add(temp);
return subsets;
}
else
{
String removed = temp.substring(0,1);
temp = temp.substring(1);
findSubsets();
subsets.add(word);
}
return subsets;
}
}
这是测试人员:
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
/**
This program tests the subset generator.
*/
public class SubsetGeneratorTester
{
public static void main(String[] args)
{
SubsetGenerator generator = new SubsetGenerator("rum");
List<String> subsets = generator.findSubsets();
// Sort the result for checking
Collections.sort(subsets);
System.out.println(subsets);
System.out.println("Expected: [, m, r, rm, ru, rum, u, um]");
}
}
【问题讨论】:
-
你现在得到了什么?
-
@ifly6 在 SubsetGenerator.findSubsets(SubsetGenerator.java:26) 的 java.lang.String.substring(String.java:1969) 的线程“main”java.lang.StackOverflowError 中出现无限递归异常在 SubsetGenerator.findSubsets(SubsetGenerator.java:26) 在 SubsetGenerator.findSubsets(SubsetGenerator.java:26) 在 SubsetGenerator.findSubsets(SubsetGenerator.java:26) 在 SubsetGenerator.findSubsets(SubsetGenerator.java:26) 在 SubsetGenerator.findSubsets(SubsetGenerator .java:26) 在 SubsetGenerator.findSubsets(SubsetGenerator.java:26
-
您应该查看StackOverflowError 上的 SO 答案。
-
你试过跟踪你的递归方法吗?
-
我认为并不是真正的递归问题。
标签: java loops recursion infinite