四、多维数组_01 &顺时针打印二维数组(笔记)

在这里插入图片描述

import java.util.Scanner;

public class A018_顺时针打印二维数组 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = 8;
		int m = 5;
		int[][] a = new int[n][m];
		boolean[][] book = new boolean[n][m];
		for (int i = 0; i < n; i++)
			for (int j = 0; j < m; j++)
				a[i][j] = sc.nextInt();
		int startX = 0, startY = 0, endX = n - 1, endY = m - 1;
		while (startX <= endX && startY <= endY) {
			int x = startX, y = startY;
			while (y <= endY && !book[x][y]){
				book[x][y] = true;
				System.out.print(a[x][y++] + " ");
			}
			y = endY;
			x++;
			while (x <= endX && !book[x][y]){
				book[x][y] = true;
				System.out.print(a[x++][y] + " ");
			}
			x = endX;
			y--;
			while (y >= startY && !book[x][y]){
				book[x][y] = true;
				System.out.print(a[x][y--] + " ");
			}
			y = startY;
			x--;
			while (x > startX && !book[x][y]){
				book[x][y] = true;
				System.out.print(a[x--][y] + " ");
			}

			x = startX;
			y++;
			System.out.println();
			// 上面一行走完后
			startX++;
			// 右边一列走完后
			endY--;
			// 下面一行走完后
			endX--;
			// 左边一列走完后
			startY++;
		}
	}
}

这里用book记录输出过的点,然后用6个变量,分别记录初值,和变化的量
初值就是数组的顶点的x和y,还有数组末位的x和y,也就是代码中的start和end
然后再用x和y作为变化的值,并且从初值0,0开始
按照顺序打印上面那行,每遍历一个点,就把book的值变为true,然后因为遍历后的y值是大于endY值的,所以要把y的值再重新赋为endY;
因为最上面那行已经打印过了,所以要把x++,打印右面那一列除了第一行已经打印过的其他元素;
那么同理,在打印完这一列后,也要把x的值重新赋为endX,然后再把y–,意思是,这一列打印完了,接下来打印最下面左边那行了,以此类推;
当最外面一圈打印完后,这里也就来到了外层循环的末尾,就需要把初值进行变化,也就是起始的两个start++然后把末尾的两个end–。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值