昨天我问了一个非常相似的问题,我有点搞砸了。
我需要将一个数组传递给一个方法,并且在该方法内部我需要交换行,所以如果它是
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;
}
}
}
任何帮助都会很棒,我的头发已经用完了!谢谢!
答案 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();
}