四、多维数组_02 &Z形打印_简化问题(笔记)

在这里插入图片描述
这里可以把题目简化,把Z字形看成是斜着打印数组,比如2-5就是从上往左下打印,然后9-6-3就是从左往右上斜着打印,搞清楚这点后,线上代码和运行结果:

import java.util.Scanner;

public class A019_Z形打印_简化问题 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int m = 5;
		int n = 5;
		int[][] arr = new int[m][n];
		for (int i = 0; i < m; i++)
			for (int j = 0; j < n; j++)
				arr[i][j] = sc.nextInt();
		int r = 0, c = 0;
		boolean flag = true;
		while (r < m && c < n) {
			if (flag) {
				System.out.print(arr[r][c] + " ");
				if (r == 0 && c < n - 1) {
					flag = !flag;
					c++;
					continue;
				} else if (r >= 0 && c == n - 1) {
					flag = !flag;
					r++;
					continue;
				} else {
					r--;
					c++;
				}
			} else {
				System.out.print(arr[r][c] + " ");
				if (c == 0 && r < m - 1) {
					flag = !flag;
					r++;
					continue;
				} else if (c >= 0 && r == m - 1) {
					flag = !flag;
					c++;
					continue;
				} else {
					r++;
					c--;
				}
			}
		}
	}
}

在这里插入图片描述
基础的输入啥的就不说了,首先定义三个变量,r和c分别是行和列,flag是往哪个方向斜着打印,true就是从左向右上斜着打印。
进入循环:
首先判断flag的值,确定打印的方向,首先把元素进行输出,然后判断r和c的值,首先是走到上面的情况,也就是刚进来的第一行,第一列的那个元素,如果这个时候的行是0,也就是到边界了,而且列是小于总列数的,那么就向右走一步,而且把flag的值反一下,表示接下去会打印另一个方向,如果这个时候的列已经到头了,并且行没到边界的话,那么就往下走,也就是r++;
这里再捋一下思路,
1、行==0以及c<n-1;这个情况的话,就说明行走到头了,但是列没,所以就要列++向右移一个,并且flag取反;
2、r >= 0 && c == n - 1;这个情况,就说明列走到头了,但是行还没,所以就要行++向下移一个,这里可以参考走到顶点的情况
3、其他情况的话,那就正常按照斜着打印的方向走,比如从右到左下这样斜着,就是行++,列–;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值