2015-11-04 65 views
0

如何根據鍵值生成數組值的組合如何根據其鍵值生成數組值的組合

我在文件的下面有輸入。字符串索引鍵和數組值

SL [1,3] 
SW [5,7] 
PL [11,12] 
PW [16] 

,我試圖生成以下組合鍵和值的

如(鍵):

(SL,SW) : < 1,5 > < 1,7 > < 3,5 > < 3,7 > 
(SL,PL): < 1,11 > < 1,12 > < 3,11 > < 3,12 > 
(SL,PW): < 1,16 > < 3,16 > 
(SW,PL): < 5,11 > < 5,12 > < 7,11 > < 7,12 > 
(SW,PW): < 5,16 > < 7,16 > 
(PL,PW): < 11,16 > < 12,16 > 

Consider combination of three attributes: 

(SL,SW,PL): < 1,5,11 > < 1,5,12 > < 1,7,11 > < 1,7,12 > < 3,5,11 > < 3,5,12 > < 3,7,11 > < 3,7,12 > 
(SL,SW,PW): < 1,5,16 > < 1,7,16 > < 3,5,16 > < 3,7,16 > 
(SL,PL,PW): < 1,11,16 > < 1,12,16 > < 3,11,16 > < 3,12,16 > 
(SW,PL,PW): < 5,11,16 > < 5,12,16 > < 7,11,16 > < 7,12,16 > 

到目前爲止,我只能夠創建keys.but組合,但其中包括SL SL也是我不需要的,也是我需要得到我以前提出的值的組合。

public void GenCombinations(String[] str_arr) { 
    for (int i = 0; i < str_arr.length; i++) { 
     System.out.print(str_arr[i] + " "); 
    } 

    /*COMBINATIONS OF LENGTH ONE*/ 
    for (int i = 0; i < str_arr.length; i++) { 
     System.out.println(str_arr[i]); 
    }   

    /*COMBINATIONS OF LENGTH TWO*/ 
    for (int i = 0; i < str_arr.length; i++) { 
     for (int j = 0; j < str_arr.length; j++) { 
      System.out.println(str_arr[i] + " " + str_arr[j]); 
     } 
    } 

    /*COMBINATIONS OF LENGTH THREE*/ 
    for (int i = 0; i < str_arr.length; i++) { 
     for (int j = 0; j < str_arr.length; j++) { 
      for (int k = 0; k < str_arr.length; k++) { 
       System.out.println(str_arr[i] + " " + str_arr[j] + " " + str_arr[k]); 
      } 
     } 
    } 
} 

電流輸出

SL 
SW 
PL 
PW 
SL SL 
SL SW 
SL PL 
SL PW 
. 
. 
. 

如何達到所需的輸出來獲得值的combnations的鑰匙的組合一起?

請建議。

回答

0

您既可以檢查索引:

for(int i = 0; i < str_arr.length; i++) { 
    for(int j = 0; j < str_arr.length; j++) { 
    if (i != j) { 
     System.out.println(str_arr[i] + " " + str_arr[j]);  
    }    
    } 
} 

,或者去字符串比較:

for(int i = 0; i < str_arr.length; i++) { 
    for(int j = 0; j < str_arr.length; j++) { 
    if (!str_arr[i].equals(str_arr[j]) { 
     System.out.println(str_arr[i] + " " + str_arr[j]);  
    }    
    } 
} 
0

如何初始化j = i+1k = j+1

public void GenCombinations(String[] str_arr){ 
    /*COMBINATIONS OF LENGTH TWO*/ 
    for(int i=0;i<str_arr.length;i++) 
    { 
     for(int j=i+1;j<str_arr.length;j++) 
     { 
      System.out.println(str_arr[i]+" "+str_arr[j]);     
     } 
    } 

    /*COMBINATIONS OF LENGTH THREE*/ 
    for(int i=0;i<str_arr.length;i++) 
    { 
     for(int j=i+1;j<str_arr.length;j++) 
     { 
      for(int k=j+1;k<str_arr.length;k++) 
      { 
       System.out.println(str_arr[i]+" "+str_arr[j]+" "+str_arr[k]);      
      } 
     } 
    } 
} 

編輯:如果你想生成所有組合,你可能想遞歸地做到這一點

private static void GenCombinations(String[] head, String[] tail, int headIndex, int tailIndex) { 
    if (headIndex == head.length) { 
     System.out.println(Arrays.toString(head)); 
     return; 
    } 
    if (tailIndex >= tail.length) 
     return; 

    // Either take tail[tailIndex] to head[headIndex] 
    head[headIndex] = tail[tailIndex]; 
    GenCombinations(head, tail, headIndex+1, tailIndex+1); 

    // Or don't take it, and try the next element to put in head[headIndex] 
    GenCombinations(head, tail, headIndex, tailIndex+1); 
} 

private static void GenCombinations(String[] str_arr, int num) { 
    GenCombinations(new String[num], str_arr, 0, 0); 
} 

private static void GenCombinations(String[] str_arr) { 
    for (int i = 1; i <= str_arr.length; i++) 
     GenCombinations(str_arr, i); 
} 
+0

是現在它在正確的方式正在添加的鑰匙,但如何生成其值的組合? –

+0

你如何保留你的價值觀?數組或列表還是別的?你需要提供更多的代碼。 – dejvuth

+0

基本上,這個想法是:而不是打印出鍵,用它們來索引你的值。例如,使用兩個鍵您將擁有兩個數組值。循環它們以獲得所有可能的組合。 – dejvuth

相關問題