3

String 配列内の値のすべての可能な順列を返そうとしています。考えられるすべての順列を作成する次のコードを思いつきました。それは正常に動作します。

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

基本的な概念が機能したら、Stringの代わりにListArrayを使用することもできます。

于 2012-09-27T20:03:32.490 に答える