JAVA基础-尚硅谷-数组练习题-回形数格式方阵功能实现

回形数格式方阵功能实现:

代码如下:
第一种方法:

//输出回形数
import java.util.Scanner;
public class HuiXingShuTest {
	public static void main(String[] args) {
		System.out.print("请输入一个数:");
		Scanner scan = new Scanner(System.in);
		//从键盘获取一个数
		int num = scan.nextInt();
		int k = 1;//先让数组赋值向右依次赋值
		int i = 0,j = 0;
		//初始化数组
		int[][] arr = new int[num][num];
		//使m依次从1到num*num自增
		for(int m = 1;m <= num * num;m++) {
			/*
			 * k = 1:向右 k = 2:向下 k = 3:向左 k = 4:向上
			 * 依次按顺时针方向以回字形给元素赋值
			 */ 
			//向右给数组赋值
			if(k == 1) {
				//判断数组内元素角标是否超过最大值,以及元素是否已赋值
				if(j < num && arr[i][j] == 0) {					
					arr[i][j++] = m;//给各元素赋值
				}else {//若内元素角标超过最大值,则向下赋值
					k = 2;
					i++;
					j--;
					m--;
				}				
			}else if(k == 2) {//向下给数组赋值
				//判断数组外元素角标是否超过最大值,以及元素是否已赋值
				if(i < num && arr[i][j] == 0) {				
					arr[i++][j] = m;//给各元素赋值
				}else {//若外元素角标超过最大值,则向左赋值
					k = 3;
					i--;
					j--;
					m--;
				}									
			}else if(k == 3) {//向左给数组赋值
				//判断数组内元素角标是否超过最小值,以及元素是否已赋值
				if(j >= 0 && arr[i][j] == 0) {
					arr[i][j--] = m;//给各元素赋值
				}else {//若内元素角标超过最大值,则向上赋值
					k = 4;
					i--;
					j++;
					m--;
				}					
			}else if(k == 4) {
				//判断数组外元素角标是否超过最小值,以及元素是否已赋值
				if(i >= 0 && arr[i][j] == 0) {
					arr[i--][j] = m;//给各元素赋值
				}else {//若外元素角标超过最大值,则向右赋值
					k = 1;
					i++;
					j++;
					m--;
				}
			}						
		}
		//遍历数组
		for(int l = 0;l < arr.length;l++) {
			for(int n = 0;n < arr[l].length;n++) {
				System.out.print(arr[l][n] + "\t");
			}
			System.out.println();
		}
	}
}

第二种方法:

import java.util.Scanner;

public class HuiXingShuTest2 {
	public static void main(String[] args) {
		System.out.print("请输入一个数:");
		Scanner scan = new Scanner(System.in);
		// 从键盘获取一个数
		int num = scan.nextInt();
		//初始化数组 
		int[][] arr = new int[num][num]; 
		int count = 0;//要赋值的数据
		int maxX = num -1;// x轴最大下标
		int maxY = num -1;// y轴最大下标
		int minX = 0;// x轴最小下标
		int minY = 0;// y轴最小下标
		while(minX <= maxX) {
			for(int x = minX;x <= maxX;x++) {
				arr[minY][x] = ++count;
			}
			minY++;
			for(int y = minY;y <= maxY;y++) {
				arr[y][maxX] = ++count;
			}
			maxX--;
			for(int x = maxX;x >= minX;x--) {
				arr[maxY][x] = ++count;
			}
			maxY--;
			for(int y =maxY;y >= minY;y--) {
				arr[y][minX] = ++count;
			}
			minX++;
		}
		//遍历数组
		for (int l = 0; l < arr.length; l++) {
			for (int n = 0; n < arr[l].length; n++) {
				System.out.print(arr[l][n] + "\t");
			}
			System.out.println();
		}
	}
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

散人_丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值