嘿伙计们,我试图通过制作一个递归生成String
ArrayList
的程序来获得递归概念。我的基本算法是:
public static ArrayList<String> generateListOfAll1sStrings(int maxBits)
终端条件:如果maxBits为1,则返回最简单的情况:只包含“1”的列表
,否则:
以递归方式调用generateListOfAll1sStrings()
获取下一个最小的位长度,保存返回的列表
找到该列表中最长的字符串,并创建一个附加“1”的新字符串(制作下一个最长的字符串)
返回一个新列表,其中包含较短列表的所有元素以及刚刚添加的新字符串。
我到目前为止的代码是:
package bincomb.model;
import java.util.ArrayList;
public class BinaryCombinationGenerator {
public static ArrayList<String> generateListOfAll1sStrings(int maxBits) {
String string = null;
ArrayList<String> listofJust1 = new ArrayList<String>();
ArrayList<String> otherArray = new ArrayList<String>();
int i = 1;
if (maxBits == 1) {
listofJust1.add("1");
return listofJust1;
}
if (maxBits > 1) {
for (String string2 : listofJust1) {
String comp = "";
if (!(comp.equals(string2))) {
comp = string2;
}
string = comp;
}
listofJust1.add(i, (string + "1"));
i++;
listofJust1 = BinaryCombinationGenerator.generateListOfAll1sStrings((maxBits-1));
System.out.println(listofJust1);
return listofJust1;
}
return listofJust1;
}
public static void main(String[] args) {
generateListOfAll1sStrings(10);
}
}
但是,目前,我正在返回IndexOutOfBoundsException
。我认为我的for循环导致了问题,但我不确定如何修复它。
答案 0 :(得分:0)
您在此行java.lang.IndexOutOfBoundsException
获得listofJust1.add(i, (string + "1"));
。
这是因为方法list.add(index,objects)尝试在索引“1”处添加对象,但是您的数组有0个元素。
将其更改为listofJust1.add(i-1, (string + "1"));
或仅listofJust1.add((string + "1"));
@Edit:here:
listofJust1.add(i, (string + "1"));
您想要为当前(N)递归级别添加字符串,但在下面用以下代码替换此数组:
listofJust1 = BinaryCombinationGenerator.generateListOfAll1sStrings((maxBits-1));
其中基本上说“得到(maxBits-1)的结果并用它替换listofJust1”因此你失去了之前添加的内容。
相反,您应首先获取级别N-1的列表,然后添加当前级别的字符串:
listofJust1 = BinaryCombinationGenerator.generateListOfAll1sStrings((maxBits-1));
listofJust1.add(stringForThisLevel);
此外,您还需要了解如何在N级计算“字符串”,这似乎不对。