3

我正在尝试返回字符串数组中所有可能的值排列。我提出了以下代码,可以进行所有可能的排列;它工作正常。

private void combineArray(String sPrefix, String[] sInput, int iLength) {
    if (iLength == sPrefix.length()) {
        //This value should be returned and concatenated:
        System.out.println(sPrefix);
    } else {
        for (int i=0; i<sInput.length; i++) {
            combineArray(sPrefix.concat(sInput[i]), ArrayUtils.removeElement(sInput, sInput[i]), iLength);
        }
    }
}

如果我输入 {x, y ,z} 它会打印到控制台:

xyz
xzy
yxz
yzx
zxy
zyx

我的问题是我找不到将这些值返回给原始调用函数的方法。所以我希望这个函数不返回“void”,而是返回一个包含 sPrefix 连接值的“String”。

我已经为此苦苦挣扎了一段时间,我似乎再也看不清楚了。:) 任何帮助,将不胜感激。

4

3 回答 3

4

我认为与其返回一个列表,不如将一个列表作为参数传入,然后在方法中填充它可能会更好:

private void combineArray(List<String> lOut, String sPrefix, String[] sInput, int iLength) {
    if (iLength == sPrefix.length()) {
        //This value should be returned and concatenated:
        System.out.println(sPrefix);
        lOut.add(sPrefix);
    } else {
        for (int i=0; i<sInput.length; i++) {
            combineArray(lOut, sPrefix.concat(sInput[i]), ArrayUtils.removeElement(sInput, sInput[i]), iLength);
        }
    }
}

然后,您可以有一个包装方法来创建new ArrayList<String>,将其传递给上述方法,然后返回它。

于 2012-09-27T20:03:05.517 回答
1

你可以有一个ArrayList<String>并将所有字符串添加到它..然后你可以返回这个 ArrayList..

List<String> listString = new ArrayList<>();
private void combineArray(String sPrefix, String[] sInput, int iLength) {
    if (iLength == sPrefix.length()) {
        listString.add(sPrefix);
        //This value should be returned and concatenated:
        System.out.println(sPrefix);
    } else {
        for (int i=0; i<sInput.length; i++) {
            combineArray(sPrefix.concat(sInput[i]), ArrayUtils.removeElement(sInput, sInput[i]), iLength);
        }
    }
    return listString;
}
于 2012-09-27T20:01:52.020 回答
-1

继续附加到相同的输出..像这样:

private String combineArray(String sPrefix, String[] sInput, int iLength, String output) {
    if (iLength == sPrefix.length()) {
        //This value should be returned and concatenated:
        System.out.println(sPrefix);
        output = output+"|+sPrefix;
        return output;
    } else {
        for (int i=0; i<sInput.length; i++) {
            output = combineArray(sPrefix.concat(sInput[i]), ArrayUtils.removeElement(sInput, sInput[i]), iLength, output);
        }
    }
}

一旦基本概念有效,您也可以使用 ListArray 而不是 String。

于 2012-09-27T20:03:32.490 回答