切换行和列2d阵列

时间:2017-06-08 10:40:35

标签: java

我想在2D数组中交换Columns和Rows。

我的问题是我希望变量“oldField”保存oldField。我认为变量指向与newField相同的对象,所以即使我不想要它也会改变它。

我想知道如何保存独立的变量oldField

public int[][] swapMatrix(int[][] pField) { // swaps the rows and columns in
                                            // a Field
    int[][] oldField = pField.clone();
    int[][] newField = pField.clone();
    for (int i = 0; i < newField.length; i++) {
        for (int j = (newField.length - 1); j >= 0; j--) {
            newField[i][(newField.length - 1) - j] = oldField[j][i];
        }
    }
    return newField;

}

2 个答案:

答案 0 :(得分:0)

当您使用原始值(如int)复制一维数组时,新数组和内容将复制到该数组,并且没有引用。

 int row1[] = {0,1,2,3};
    int row2[] =  row1.clone();
    row2[0] = 10;
    System.out.println(row1[0] == row2[0]); // prints false

但对于二维数组,内容是对象,克隆方法只做浅层复制,如果有对象则不创建新内容。根据您的要求,您需要进行深层复制。

int table1[][]={{0,1,2,3},{11,12,13,14}};
    int table2[][] = table1.clone();
    table2[0][0] = 100;
    System.out.println(table1[0][0] == table2[0][0]); //prints true

答案 1 :(得分:0)

此代码解决了您的问题:

public class SwapRowsAndColumns {

    public static void main(String[] args) {

        int[][] someMatrix = new int[2][3];

        someMatrix[0][0] = 1;
        someMatrix[0][1] = 2;
        someMatrix[0][2] = 3;

        someMatrix[1][0] = 4;
        someMatrix[1][1] = 5;
        someMatrix[1][2] = 6;

        printMatrix(someMatrix);
        int[][] invertedMatrix = swapMatrix(someMatrix);
        printMatrix(invertedMatrix);

    }

    private static int[][] swapMatrix(int[][] pField) {

        int originalTotalRows = pField.length;
        int originalTotalColumns = pField[0].length;

        int[][] newMatrix = new int[originalTotalColumns][originalTotalRows];

        for(int i=0; i< originalTotalRows; i++){
            for(int j=0; j < originalTotalColumns; j++){
                newMatrix[j][i] = pField[i][j];
            }
        }
        return newMatrix;
    }

    private static void printMatrix(int[][] matrix){
        int totalRows = matrix.length;
        int totalColumns = matrix[0].length;

        for(int i=0; i< totalRows; i++){
            for(int j=0; j< totalColumns; j++){
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println("");
        }
    }
}