0

行と列は混同しやすいので、頭の中でこの問題が好転しているように感じます。誰かが私が間違っている場所を教えてくれますか?

public static void switchRows( int[][] anArray ){
    int num = 1;

    for(int i = 0; anArray.length > i; i++){
        for(int j = 0; anArray[i].length > j; j++){
            int[][] temp = new int[anArray.length][anArray[i].length];

            temp[i] = anArray[i];
            anArray[i] = anArray[anArray.length - num];
            anArray[anArray.length - num] = temp[i];

        }
        num++;
    }       
}

public static void switchColumns( char[][] anArray ){       
    int col = 1;

    for(int i = 0; anArray.length > i; i++){
        for(int j = 0; anArray[i].length > j; j++){
            char[][] temp = new char[anArray.length][anArray[i].length];

            temp[j] = anArray[j];
            anArray[j] = anArray[anArray[i].length - col];
            anArray[anArray[i].length - col] = temp[j];

        }
        col++;
    }
}
4

3 に答える 3

0

このコードを試してください。ではswitchRows、ピボット変数を使用して、tmp反対の行のセルの値を交換します。この式[anArray.length - i -1][j]は、反対の行にあるが同じ列にあるセルのインデックスを に与えます[i][j]。また、行の半分を繰り返し(anArray.length/2)、スワップ操作に余分な配列は必要ないことに注意してください。手順はswitchColumnsアナログです。

public static void switchRows(int[][] anArray) {
    for (int i = 0; i < anArray.length/2; i++) {
        for (int j = 0; j < anArray[i].length; j++) {
            int tmp = anArray[i][j];
            anArray[i][j] = anArray[anArray.length - i -1][j];
            anArray[anArray.length - i -1][j] = tmp;
        }
    }
}

public static void switchColumns(char[][] anArray) {
    for (int i = 0; i < anArray.length; i++) {
        for (int j = 0; j < anArray[i].length/2; j++) {
            char tmp = anArray[i][j];
            anArray[i][j] = anArray[i][j + anArray[i].length - 1];
            anArray[i][j + anArray[i].length - 1] = tmp;
        }
    }
}
于 2013-09-10T19:55:09.143 に答える