[英]Java Generating Strings Recursively - All 1s then 1 and 0
大家好,我試圖通過制作一個遞歸生成ArrayList
String
的程序來降低遞歸的概念。 我的基本算法是:
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循環引起了問題,但是我不確定如何解決它。
您在此行listofJust1.add(i, (string + "1"));
收到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級計算“字符串”,這似乎不正確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.