反转2d数组的行

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

我需要将一个数组传递给一个方法,在该方法内部,我需要交换周围的行,如果是的话

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; } } } 

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

首先,如何反转单个1-Darrays:

 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]); } 

不确定我是不是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. } } 

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(); } } } 

两个Darrays的反转 – 以相反的顺序打印两个Darrays

 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(); } } 
 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=0;j--) { System.out.print(a[i][j]+","); } System.out.println(); } } 

反转2 Darrays

 public static void main(String[] args) { int a[][] = {{1,2,3}, {4,5,6}, {8,9,10,12,15} }; for(int i=0 ; i=0;j--) { System.out.print(a[i][j]+","); } System.out.println(); }