Z字形打印矩阵

打印例子如下,我们设置两个点分别是A、B。每次A往绿色箭头移动一步,B往蓝色箭头移动一步,所要打印的就是A、B连线之间的元素,但是要区分下方向(斜向上或者斜向下),打印结果为 1,2,5, 9 ,6, 3, 4 ,7, 1 0, 11, 8, 12
在这里插入图片描述

public class PrintZMatrix {

	public static void PrintZ(int[][] arr) {
		if(arr==null)
			return;
		boolean dir=true;
		int lenR=arr.length-1;
		int lenC=arr[0].length-1;
		int aR=0,aC=0,bR=0,bC=0;//A、B点的初始坐标
		do {
			PrintLine(arr,aR,aC,bR,bC,dir);//打印A、B连线之间的点
			if(aC<lenC)//A点移动
				aC++;
			else
				aR++;
			if(bR<lenR)//B点移动
				bR++;
			else
				bC++;
			dir=dir?false:true;//打印方向改变
			/
		} while (aR!=bR&&aC!=bC);
		System.out.print(arr[aR][aC]);
		
	}
	public static void PrintLine(int[][] arr,int aR,int aC,int bR,int bC,boolean dir) {
		if(dir)
		{
			while(bR>=aR)
			{
				System.out.print(arr[bR--][bC++]+" ");
				//bR--;
				//bC++;
			}
		}
		else
		{
			while(bR>=aR)
			{
				System.out.print(arr[aR++][aC--]+" ");
				//aR++;
				//aC--;
			}
		}
	}
	public static void main(String[] args) {
		int[][] arr= {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
		PrintZ(arr);
	}

}

PrintZ()函数还可以修改成一下:

public static void PrintZ(int[][] arr) {
		if(arr==null)
			return;
		boolean dir=true;
		int lenR=arr.length-1;
		int lenC=arr[0].length-1;
		int aR=0,aC=0,bR=0,bC=0;
		do {
			PrintLine(arr,aR,aC,bR,bC,dir);
			aR=aC==lenC?aR+1:aR;
			aC=aC==lenC?aC:aC+1;
			bC=bR==lenR?bC+1:bC;
			bR=bR==lenR?bR:bR+1;
			dir=!dir;
		} while (aR<=lenR+1);
		
	}

猜你喜欢

转载自blog.csdn.net/qq_42403295/article/details/88657623