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

1

行是水平的,列是垂直的。根据你的描述,你有这样的东西:

       COLUMN 1   | Column 2
ROW 1 |    'a'    |   'b'
ROW 2 |    'x'    |   'y'

使用 2d 数组,您将拥有var myVar[ROW][COLUMN] 因此, 的值myVar[1][2]将是 'b',即ROW 1COLUMN 2

对于这个程序,听起来你需要两个功能。第一个应该将行 ( switchRows)的值ROW 1与交换ROW 2,因此您将拥有:

       COLUMN 1   | Column 2
ROW 1 |    'x'    |   'y'
ROW 2 |    'a'    |   'b'

的值myVar[1][2]将是'y'。

另一个应该函数应该将列 ( switchColumns)的值COLUMN 1与交换COLUMN 2,因此您将拥有

       COLUMN 1   | Column 2
ROW 1 |    'b'    |   'a'
ROW 2 |    'y'    |   'x'

这样做之后的值myVar[1][2]将是'a'。

作为有关如何执行此操作的提示,如所述(如此)将数组从里到外交换[1, 2, 3, 4, 5][5, 4, 3, 2, 1]颠倒数组内元素的顺序相同。尝试将元素添加到新数组中,但从原始数组的末尾开始并一直工作到开头。

编辑:其他几点注意事项:您正在通过内部循环每次迭代重新声明您的临时数组for,有效地重置它。

此外,您实际上只需要一个函数来进行实际交换。在伪代码中:

public int[] swap(int[] stuff){
   //do the swapping here
   return swappedStuff;
}

public int[][] innerSwap(int[][] stuff){
   //go through every char[] and set it equal to swap(char[])
   return innerSwappedStuff;
}
于 2013-09-10T19:43:18.567 回答
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 回答
0

试试这个行。您可以使用 main 进行测试:

    public class ArrayRowSwitcher {

        public static int[][] switchRows(int[][] anArray) {
            int rows = anArray.length;
            int columns = anArray[0].length;
            int[][] result = new int[rows][columns];
            for (int i = 0; rows > i; i++) {
                for (int j = 0; j < anArray[i].length; j++) {
                    result[rows - i - 1][j] = anArray[i][j];
                }

            }
            return result;
        }

        public static void main(String[] args) {

            int[][] test = new int[][] {{1,1,1},{2,1,1},{3,1,1},{4,1,1},{5,1,1},{6,1,1}};
            int[][] result = switchRows(test);
            for (int i =0;i<test.length;i++){
                System.out.print("printing row " +i + " --> ");
                for (int j =0;j<test[0].length;j++){
                System.out.print(result[i][j]);
                }
                System.out.println("-----------------");
            }
        }
    }
于 2013-09-10T20:12:08.277 回答