Java 递归友元数组

Java 递归友元数组,java,arrays,recursion,Java,Arrays,Recursion,我尝试递归地做friend数组,一个数组是另一个数组的friend如果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(friendA

我尝试递归地做friend数组,一个数组是另一个数组的friend如果
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);

        }
    }
}


如何保存其他值以更改5等的2?

如果将
条件更改为

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);
 }
if(行>=arr.length)
返回;
如果(列>=arr[row].length)
返回;
如果(行<列){
内部温度;
温度=阵列[行][列];
arr[row][col]=arr[col][row];
arr[col][row]=温度;
friendArrayRecursive(arr、row、col+1);
}否则{
friendArrayRecursive(arr,行+1,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);
 }
if(行>=arr.length)
返回;
如果(列>=arr[row].length)
返回;
如果(行<列){
内部温度;
温度=阵列[行][列];
arr[row][col]=arr[col][row];
arr[col][row]=温度;
friendArrayRecursive(arr、row、col+1);
}否则{
friendArrayRecursive(arr,行+1,0);
}

正如nhouser9所说,您需要使用临时变量交换值。当然,如果你遍历所有单元格,交换会发生两次,因此会被取消。因此,只需要使用比较(col
private static void friendArrayRecursive(int[]arr,int行,int列){
if(行<阵列长度){
如果(列<行){
int temp=arr[行][col];
arr[row][col]=arr[col][row];
arr[col][row]=温度;
friendArrayRecursive(arr、row、col+1);
}否则{
friendArrayRecursive(arr,行+1,0);
}
}
}

正如nhouser9所说,您需要使用临时变量交换值。当然,如果你遍历所有单元格,交换会发生两次,因此会被取消。因此,只需要使用比较(col
private static void friendArrayRecursive(int[]arr,int行,int列){
if(行<阵列长度){
如果(列<行){
int temp=arr[行][col];
arr[row][col]=arr[col][row];
arr[col][row]=温度;
friendArrayRecursive(arr、row、col+1);
}否则{
friendArrayRecursive(arr,行+1,0);
}
}
}

如果你继续@Stuart2041no,保持不变,我可以将2更改为5,但随后我松开了2,你只是在将一个单元格复制到另一个单元格。你需要做的是交换它,但是在你做第一行的时候,他们会再次交换如果条件是这样的话@Stuart2041no,保持不变,我可以把2换成5,但是我松开了2,你只是在把一个单元格复制到另一个单元格。你需要做的是交换它,但是在你做第1行的时候,他们会再次交换。你可以向我解释为什么你把colif(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); }
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);    
        }
    }
}