0

嘿伙计们,我试图通过制作一个递归生成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 循环导致了问题,但我不确定如何解决它。

4

1 回答 1

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

@编辑:这里:

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 级计算“字符串”,这似乎不正确。

于 2013-10-22T02:05:38.730 回答