2017-05-08 76 views
0

以下是沒有作業。我只是想寫我自己的排列代碼。我有一個想法,但我在編寫這個想法時遇到問題。交換特定數組元素的問題

作爲示例的輸入是myArray={1,2,3};

然後,輸出應該是:

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

我想出它通過切換與第二第一元件是可能的,然後與第三開關第二(但是不完全可能,但我知道我需要這個)。

這就是爲什麼我的問題是如何在Java中做到這一點?

我有1 2 3,我想用第二個開關元件,所以我得到2 1 3。打印這個。現在我想用第三個元素切換第二個元素,我得到2 3 1,打印它。重複n!次,其中n是myArray長度。

我試着用下面的代碼來做到這一點,但它似乎像我遠離它:(

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?第二個答案應該有所幫助。 – 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(""); 
} 

編輯

我注意到,有一個錯誤的命令,所以它應該會更好:

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