2017-05-08 8 views
0

以下は宿題がありません。私は自分の順列コードを書こうとしています。私はアイデアを持っていますが、私はコードとしてこのアイデアを書く際に問題があります。特定の配列要素を交換する際の問題

例としての入力はmyArray={1,2,3};

そして出力があることが想定されている:

1 2 3 
2 1 3 
2 3 1 
3 2 1 
3 1 2 
1 3 2 

Iが考え出し、それは第二と第一スイッチング素子によって可能だ、次いでしかし(第3と第二のないスイッチ完全に可能ですが、私はこれが必要であることを知っています)。

私はJavaでこれをどうやって行うのですか?

私は1 2 3を持っています。私は最初の要素を2番目に切り替えたいので、2 1 3となります。これを印刷します。今、私はスイッチの第2要素を第3としたい、私は2 3 1を得てそれを印刷する。 nがmyArrayの長さである場合には、n!回を繰り返す。

私は、次のコードでこれを実行しようとしましたが、私は遠く離れてそれからだように思える:(

public class Test{ 
    public static void main(String[] args){ 
     int[] myArray = {1,2,3}; 

     for(int x=0; x<6; x++){ 
      for(int i=0; i<myArray.length-1; i++){ 
       int temp=myArray[i]; 
       myArray[i]=myArray[i+1]; 
       myArray[i+1]=temp; 
      } 
      for(int i=0; i<myArray.length; i++){ 
       System.out.print(myArray[i]+" "); 
      } 
      System.out.println(""); 
     } 
    } 
} 
Output: 
2 3 1 
3 1 2 
1 2 3 
2 3 1 
3 1 2 
1 2 3 
+1

まず、すべてのスワップ後に印刷したいと思っています。 – maszter

+0

あなたはこれを見ましたか:http://stackoverflow.com/questions/2920315/permutation-of-array? 2番目の答えが役に立つはずです。 – quackenator

答えて

1

私は私も正しく理解している場合はわからない。

public static void main(String[] args) { 
    int[] myArray = {1, 2, 3}; 
    for (int i = 0; i < 6; i++) { 
     print(myArray); 
     int temp = myArray[i % myArray.length]; 
     myArray[i % myArray.length] = myArray[(i + 1) % myArray.length]; 
     myArray[(i + 1) % myArray.length] = temp; 
    } 
} 

private static void print(int[] array) { 
    for (int anArray : array) { 
     System.out.print(anArray + " "); 
    } 
    System.out.println(""); 
} 

EDIT

私が間違った順序があるので、それは良いはず、気づい:

public static void main(String[] args) { 
    int[] myArray = {1, 2, 3}; 

    for (int i = 0; i < 6; i++) { 
     int idx = i % (myArray.length - 1); 
     print(myArray); 
     int temp = myArray[idx]; 
     myArray[idx] = myArray[idx + 1]; 
     myArray[idx + 1] = temp; 
    } 
} 
関連する問題