反转2d数组的行

时间:2014-02-20 22:19:34

标签: java arrays multidimensional-array

昨天我问了一个非常相似的问题,我有点搞砸了。

我需要将一个数组传递给一个方法,并且在该方法内部我需要交换行,所以如果它是

1 2 3

3 2 1

2 1 3

它需要

3 2 1

1 2 3

3 1 2

使用我现在拥有的代码,它将最后一列正确地交换到第一个列位置,然后将该列放在最后一列。

3 1 2

1 3 2

3 2 1

此外,它需要保持空白,因为我需要修改原始数组,所以我不能将它设置为临时数组,但我可以使用临时整数来存储。

以下是我现在正在使用的代码

public static void reverseRows(int[][] inTwoDArray)
{
   for (int row = 0; row < inTwoDArray.length; row++)
   {
       for (int col = 0; col < inTwoDArray[row].length; col++)
       {
           int tempHolder = inTwoDArray[row][col];
           inTwoDArray[row][col] = inTwoDArray[row][inTwoDArray[0].length - 1];
           inTwoDArray[row][inTwoDArray[0].length - 1] = tempHolder;
       }
    }
 }

任何帮助都会很棒,我的头发已经用完了!谢谢!

7 个答案:

答案 0 :(得分:5)

首先,如何反转单个1-D阵列:

for(int i = 0; i < array.length / 2; i++) {
    int temp = array[i];
    array[i] = array[array.length - i - 1];
    array[array.length - i - 1] = temp;
}

请注意,您必须停在一半的数组中,或者将它交换两次(它与您开始使用的相同)。

然后把它放在另一个for循环中:

for(int j = 0; j < array.length; j++){
    for(int i = 0; i < array[j].length / 2; i++) {
        int temp = array[j][i];
        array[j][i] = array[j][array[j].length - i - 1];
        array[j][array[j].length - i - 1] = temp;
    }
}

另一种方法是使用一些库方法,例如来自ArrayUtils#reverse()

ArrayUtils.reverse(array);

然后又进入一个循环:

for(int i = 0; i < array.length; i++){
   ArrayUtils.reverse(array[i]);
}

答案 1 :(得分:1)

不确定我是否没有cofuse哪个数组存储行以及哪一个列....但是这个shoudl工作(很长一段时间以来我已经完成Java了,所以在发现任何错误时请对我好^^):

public static void reverseRows(int [][] array)
{
    for (int i = 0 ; i < array.length ; i++) {       // for each row...
        int[] reversed = new int[array[i].length];   // ... create a temporary array that will hold the reversed inner one ...
        for(int j = o ; j < array[i].length ; j++) { // ... and for each column ...
            reversed[reversed.length - 1 - j] = array[i][j]; // ... insert the current element at the mirrored position of our temporary array
        }
        array[i] = reversed; // finally use the reversed array as new row.
    }
}

答案 2 :(得分:1)

我想这是最简单的方法,经过尝试和测试 例如,您有

1 2
3 4

您想要

2 1 
4 3 

您可以反转循环,而无需任何额外的空间或内置功能。 解决方案:

for(int i =0;i<arr.length;i++) //arr.length=no of rows
{
  for(int j = arr[i].length-1;j>=0;j--)//arr[i].length=no of col in a ith row
    {
        System.out.print(arr[i][j]+" ");
    }
    System.out.println();
}

答案 3 :(得分:0)

Java代码: -

import java.util.Scanner;

public class Rev_Two_D {

    static int col;
    static int row;
    static int[][] trans_arr = new int[col][row];

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        row = m;
        int n = sc.nextInt();
        col = n;
        int[][] arr = new int[row][col];

        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                arr[i][j] = sc.nextInt();
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
        for (int j = 0; j < arr.length; j++) {
            for (int i = 0; i < arr[j].length / 2; i++) {
                int temp = arr[j][i];
                arr[j][i] = arr[j][arr[j].length - i - 1];
                arr[j][arr[j].length - i - 1] = temp;
            }
        }

        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

答案 4 :(得分:0)

反转两个D数组 - 以相反顺序打印两个D数组

public void reverse(){
    int row = 3;
    int col = 3;
    int[][] arr = new int[row][col];
    int k=0;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++,k++) {
            arr[i][j] = k;
            System.out.print(arr[i][j] + " ");
        }
        System.out.println();
    }
    System.out.println();
    for (int i = arr.length -1; i >=0 ; i--) {
        for (int j = arr.length -1; j >=0 ; j--) {
            System.out.print(arr[i][j] + " ");
        }
        System.out.println();
    }
}

答案 5 :(得分:0)

public static void main(String[] args) {

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

    for(int i=0 ; i<a.length;i++)
    {
        for(int j=0 ; j<a.length;j++)
        {
            System.out.print(a[i][j]+",");
        }
        System.out.println();

    }
    System.out.println("***************************");
    for(int i=0 ; i<a.length;i++)
    {
        for(int j=a.length-1 ; j>=0;j--)
        {
            System.out.print(a[i][j]+",");
        }
        System.out.println();

    }

}

答案 6 :(得分:0)

反向2 D阵列

public static void main(String[] args) {

int a[][] =  {{1,2,3},
              {4,5,6},
              {8,9,10,12,15}
              };

for(int i=0 ; i<a.length;i++)
{
    for(int j=0 ; j<a[i].length;j++)
    {
        System.out.print(a[i][j]+",");
    }
    System.out.println();

}

for(int i=0 ; i<a.length;i++)
{
    for(int j=a[i].length-1 ; j>=0;j--)
    {
        System.out.print(a[i][j]+",");
    }
    System.out.println();

}