2013-06-18 89 views
0

我試圖編寫一個函數來顯示鋸齒陣列中的所有組合,其中每個組合都包含來自每個子陣列的一個元素。鋸齒狀數組可以包含任意數量的數組,每個數組可以包含任意數量的元素。例如。以下數組: 一個[0] = {1,3,5} 一個[1] = {2,4} 它應該返回: (1,2) (1,4) (3, 2) (3,4) (5,2) (5,4)在數組中打印數字

我覺得做這種方式,但馬上遇到麻煩。從邏輯上看它可以獲得1,2和1,4,但是接下來的運行我被設置回0(抱歉不在開發機器現在測試)。 任何人都可以提出更好的解決方案嗎?

這裏是我的代碼

for (int i = 0; i < array1.length(); i++) 
    for (int j = 0; j < array2.length(); j++) 

     if (j < array2.length()) 
      i = 0; 
     else 
      i++; 

     System.out.println(array1[i] "," array2[j]) 
+0

什麼是否再次需要? –

+0

我沒有看到你有什麼後面的原因,沒有它應該打印所有的數組組合。 – Zoop

+0

如果你不想這樣做,那麼使用這個[庫](http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/index.html) – DarthCoder

回答

1

你不需要這樣的:

if (j < array2.length()) 
      i = 0; 
     else 
      i++; 

我是在自動遞增循環。

這應該是罰款:

for (int i = 0; i < array1.length(); i++) 
    for (int j = 0; j < array2.length(); j++) 
     System.out.println(array1[i] "," array2[j]) 
0

如果我正確理解你的問題(我可能不是),我認爲你需要的只是

for (int i = 0; i < array1.length(); i++){ 
    for (int j = 0; j < array2.length(); j++){ 
    System.out.println(array1[i] "," array2[j]); 
    } 
} 

,以達到預期的效果

0

這個怎麼樣:

int a [] = {1,2,3}; int b [] = {1,2};

for (int i = 0; i < b.length; i++) { 
    for (int j = 0; j < a.length; j++) { 
     System.out.println(a[i]+","+a[j]); 

    } 

} 
0

您在環路內的if聲明會破壞所有內容。你只需要2個嵌套循環來完成你的任務:

for (int i = 0; i < array1.length(); i++) 
    for (int j = 0; j < array2.length(); j++) { 
     System.out.println(array1[i] + "," + array2[j]); 
    } 
} 
0
for (int i = 0; i < array1.length(); i++) 
    for (int j = 0; j < array2.length(); j++) 
     System.out.println("(" + array1[i] + "," array2[j] + ")"); 
0

這裏是與任意數量的陣列的工作有一個大致的解決方案(注意這個算法的運行時間的指數性質):

int[][] arrays = new int[][] 
{ 
    {1, 2, 3, 4, 5, 6}, 
    {1, 2, 3, 4, 5, 6}, 
    {1, 2, 3, 4, 5, 6} 
}; // let's print all fair rolls of a 3d6 

if (arrays.length == 0) return; // this is why we can't have nice things 

int[] currentPos = new int[arrays.length]; 

while(currentPos[arrays.length - 1] != arrays[arrays.length - 1].length) 
{ 
    // print the current value 
    System.out.print(arrays[0][currentPos[0]]); 
    for (int i = 1; i < arrays.length; ++i) 
     System.out.print(", " + arrays[i][currentPos[i]]); 
    System.out.println(); 

    // increment the "counter" 
    ++currentPos[0]; 
    for (int i = 1; i < arrays.length; ++i) 
    { 
     if (currentPos[i - 1] == arrays[i - 1].length) 
     { 
      currentPos[i - 1] = 0; 
      ++currentPos[i]; 
     } 
     else break; 
    } 
}