2016-11-15 56 views
0

我試圖做遞歸的朋友數組,一個數組是另一個的朋友如果arr1[i][j] = arr2[j][i]所以我試圖遞歸做它,但我只改變第一行,其他保持不變,我必須只有1個陣列做我的意思是,我不能創建兩個我想變化是相同的陣列上,我這樣做:朋友數組遞歸

int friendArray[][] = { 
    {1,2,3,4}, 
    {5,6,7,8}, 
    {9,10,11,12}, 
    {13,14,15,16} 
}; 

friendArrayRecursive(friendArray, 0,0); 


private static void friendArrayRecursive(int[][] arr, int row, int col){ 
    if(row < arr.length){ 
     if (col < arr[row].length) { 
      arr[row][col] = arr[col][row]; 
      friendArrayRecursive(arr, row, col + 1); 
     } else { 
      friendArrayRecursive(arr, row + 1, 0); 

     } 
    } 
} 

但輸出,而不是來:

1 5 9 13 
2 6 10 14 
3 7 11 15 
4 8 12 16 

1 5 9 13 
5 6 10 14 
9 10 11 15 
13 14 15 16 

如何保存另一個值以更改5等的2 ...?

回答

3

正如nhouser9說,你需要使用一個臨時變量來交換值。那麼當然,如果你通過所有單元格,交換將發生兩次,因此它將被取消。因此,只需使用比較(col <行)就可以通過數組的一半。

private static void friendArrayRecursive(int[][] arr, int row, int col){ 
    if(row < arr.length){ 
     if (col < row) { 
      int temp = arr[row][col]; 
      arr[row][col] = arr[col][row]; 
      arr[col][row] = temp; 
      friendArrayRecursive(arr, row, col + 1); 
     } else { 
      friendArrayRecursive(arr, row + 1, 0);  
     } 
    } 
} 
+0

這就是我需要的,謝謝@circular !!!! :D就像一個魅力 – Stuart2041

+0

你可以向我解釋爲什麼你改變col Stuart2041

+1

通過使用此比較,當col circular

0

更改if條件

if(row >= arr.length) 
    return; 
if(col >= arr[row].length) 
    return; 
if(row < col) { 
    int temp; 
    temp = arr[row][col]; 
    arr[row][col] = arr[col][row]; 
    arr[col][row] = temp; 
    friendArrayRecursive(arr, row, col + 1); 
} else { 
    friendArrayRecursive(arr, row + 1, 0); 
} 
+0

如果條件 – Stuart2041

+0

你去@ Stuart2041 –

+0

沒有,保持相同的我可以改變2 5但後來我鬆散的2 – Stuart2041