Java 数组转置 方阵顺时针旋转90度

一维数组转置(首尾交换)

public class array {
	public static void main(String args[]){
		int data [] =new int [] {1,2,3,4,5,6};
		exchange(data);
		print1(data);
	}
	//首尾交换
	public static void exchange(int temp[]){
		int head=0;
		int tail=temp.length-1;
		for(int i=0;i<temp.length/2;i++){
			int k=temp[head];
			temp[head]=temp[tail];
			temp[tail]=k;
			head++;
			tail--;
		}
	}
	//输出
	public static void print1(int temp[]){
		for(int s=0;s<temp.length;s++){
			System.out.println(temp[s]);
		}
	}

}

二维数组转置


public class helloword {
	public static void main(String args[]){
		int data [][] = new int [][] {{1,2,3},{4,5,6},{7,8,9}};
		reverse(data);
		print1(data);
	}
	//将矩阵转置
	public static void reverse(int temp [][] ){
		for(int i=0;i<temp.length;i++){
			for(int j=i;j<temp[i].length;j++){
				int k=temp[i][j];
				temp[i][j]=temp[j][i];
				temp[j][i]=k;
              }
		}
	}
	//将矩阵输出
	public static void print1(int temp[][]){
		for(int i=0;i<temp.length;i++){
			for(int j=0;j<temp[i].length;j++){
				System.out.print(temp[i][j]+"\t");
			}
			System.out.println();
		}
	}
	
}

 

方阵顺时针旋转90


方法一:可以看出,将二维数组顺时针旋转90度,就是将其转置后的数组的列进行前后交换(即第一列变为最后一列,第二列变为倒数第二列)

方法二:通过观察,可以看出:

  1.  列号变为行号
  2. n-行号)变为列号(其中n为方阵维数减1



 

若要将矩阵顺时针旋转180,两次调用旋转90度的函数就可以。

方法一、方法二不仅针对三维方阵,其他维数的方阵也适合。

 

 

 

方法一:


public class helloword {
	public static void main(String args[]){
		int data [][] = new int [][] {{1,2,3},{4,5,6},{7,8,9}};
		reverse(data);
		exchange(data);
		print1(data);
	}
	//将矩阵转置
	public static void reverse(int temp [][] ){   
		for(int i=0;i<temp.length;i++){
			for(int j=i;j<temp[i].length;j++){
				int k=temp[i][j];
				temp[i][j]=temp[j][i];
				temp[j][i]=k;
            }
		}
	}
	//将转置后的矩阵的列交换(第一列跟最后一列交换,第二列跟倒数第二列交换)
	public static void exchange(int temp[][]){
		int a=0;
		int b=temp.length-1;
		for(int i=0;i < (temp.length)/2;i++){
			for(int j=0;j<temp.length;j++){
				int k=temp[j][a];
				temp[j][a]=temp[j][b];
				temp[j][b]=k;
			}
			a++;
			b--;
		}
	}
	//将矩阵输出
	public static void print1(int temp[][]){
		for(int i=0;i<temp.length;i++){
			for(int j=0;j<temp[i].length;j++){
				System.out.print(temp[i][j]+"\t");
			}
			System.out.println();
		}
	}
	
}

方法二:


public class arrayEx {
	public static void main(String args[]){
		int data [][] =new int [][] {{1,2,3},{4,5,6},{7,8,9}};
		rotate(data);
		print1(data);
	}
	//旋转90度
	public static void rotate(int temp[][]){
		int len=temp.length;
		int b [][]=new int [len][len];
		for(int i=0;i<len;i++){
			for(int j=0;j<len;j++){
				b[j][len-1-i]=temp[i][j];
			}
		}
		for(int i=0;i<len;i++)
			for(int j=0;j<len;j++)
				temp[i][j]=b[i][j];
	}
	//输出
	public static void print1(int temp[][]){
		for(int i=0;i<temp.length;i++){
			for(int j=0;j<temp[i].length;j++){
				System.out.print(temp[i][j]+"\t");
			}
			System.out.println();
		}
	}

}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值