2016-08-07 12 views
0

固定長3の配列の異なる順列を生成するプログラムを作成しています。 私が直面している主な問題は、常に公表順列を生成することです。 Javaを使用せずに<>を設定します。固定長(L)の異なる別個の順列を生成する

public class generatingCombination { 

    public static void main(String[] args) { 
     String s="ABCDEF"; 
      printArray(s,0,new char[3], new boolean[s.length()]); 

    } 

    static void printArray(String s,int x,char []arr, boolean [] used){ 
     if(x==3){ 
      System.out.println(Arrays.toString(arr)); 
      return; 
     } 
     else 
     { 
      for(int i=0;i<s.length();i++){ 
       if(used[i]) continue; 

       arr[x]=s.charAt(i); 
       used[i]=true; 
       printArray(s, x+1, arr,used); 
       used[i]=false; 
       printArray(s, x+1, arr,used); 

      } 
     } 

    } 
} 
+0

あなたが二回再帰呼び出しをやっているので、あなたは、重複を取得しています。どうしてそんなことをするのか?値を設定せずにselfを呼び出すと、 'used'配列のポイントは何ですか(2回目の再帰呼び出し)? – Andreas

+0

@YS。 - あなたが期待する出力に例を提供してください –

+0

2番目のprintArray呼び出しは、最初のprintArray呼び出しと同じ結果を出力します。 – tim4242

答えて

0

あなたは長さ3の順列で唯一興味があるなら、なぜだけでなく:

public static void main(String[] args) { 
    String s = "ABCDEF"; 
    for (int i = 0; i < s.length(); i++) { 
     for (int j = 0; j < s.length(); j++) { 
      if (j == i) { 
       continue; 
      } 
      for (int k = 0; k < s.length(); k++) { 
       if (k == i || k == j) { 
        continue; 
       } 
       System.out.println(Arrays.toString(new char[] { s.charAt(i), s.charAt(j), s.charAt(k)})); 
      } 
     } 
    } 
} 
関連する問題