Java实现顺时针输出螺旋二维数组的方法示例

发布时间 - 2026-01-10 22:55:43    点击率:

最近看到一道有点意思的逻辑算法题,便着手实现一下。题目是要求打印 出N*N顺时针螺旋数组,规律如下:

//  1  2  3  4  5
//  16  17  18  19  6
//  15  24  25  20  7
//  14  23  22  21  8
//  13  12  11  10  9

Java 实现示例代码如下:

import java.util.Scanner;

public class Main {

 public static void main(String[] args) {

  Scanner in = new Scanner(System.in);
  int n = in.nextInt();

  int[][] rect = new int[n + 1][n + 1];

  int x = 0, y = 1; // 当前遍历的位置
  int px = 1, py = 0; // x/y 在当前循环方向的增量
  int pn = n; // 该方向上还需要多少个数字(会递减,因为顺时针往里缩)
  int sum = n; // 当前遍历方向的终点位置

  /** 目标输出顺时针 */
  // 1  2  3  4  5
  // 16  17  18  19  6
  // 15  24  25  20  7
  // 14  23  22  21  8
  // 13  12  11  10  9

  /** 翻转矩阵为逆时针(为了便于后面逻辑处理,输出的时候再翻转回去) */
  // 1  16  15  14  13
  // 2  17  24  23  12
  // 3  18  25  22  11
  // 4  19  20  21  10
  // 5  6  7  8  9
  for (int i = 1; i <= n * n; i++) { // 翻转矩阵循环
   // 移到下一个点(第一次方向1->5 x增量为1, y的增量为0, 第二次方向为6->9,x增量为0,y增量为1,pn减少一个)
   x += px;
   y += py;
   rect[x][y] = i;
   if (i == sum) { // 到达该方向的最后一个点
    if (px == 1 || px == -1) { // x的增量不为0,则为竖向 -> 横向
     pn = pn - 1; // 竖向变为横向的时候,该方向上数字的个数会减少一个
     sum = sum + pn;
     py = px;
     px = 0;
    } else { // x的增量为0, y的增量不为0,则为横向 -> 竖向
     sum = sum + pn;
     px = -py;
     py = 0;
    }
   }
  }

  for (int i = 1; i <= n; i++) {
   for (int j = 1; j <= n; j++) {
    System.out.print(rect[j][i] + "\t"); // 翻转复原输出
   }
   System.out.println();
  }
 }

}

输出测试

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用java能带来一定的帮助,如果有疑问大家可以留言交流。


# 螺旋打印二维数组  # 二维数组顺时针输出  # java二维数组输出矩阵  # java二维数组遍历的2种代码  # Java数组的定义、初始化、及二维数组用法分析  # Java不指定长度的二维数组实例  # java实现二维数组转置的方法示例  # java实现二维数组转json的方法示例  # 浅谈java中的一维数组、二维数组、三维数组、多维数组  # java定义二维数组的几种写法(小结)  # Java二维数组查找功能代码实现  # 遍历  # 顺时针  # 不为  # 则为  # 这篇文章  # 移到  # 上还  # 往里  # 多少个  # 有疑问  # Java  # br 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  使用C语言编写圣诞表白程序  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  linux top下的 minerd 木马清除方法  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  如何在IIS中配置站点IP、端口及主机头?  如何利用DOS批处理实现定时关机操作详解  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  如何在阿里云虚拟服务器快速搭建网站?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  想要更高端的建设网站,这些原则一定要坚持!  Laravel如何实现文件上传和存储?(本地与S3配置)  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  nginx修改上传文件大小限制的方法  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  音响网站制作视频教程,隆霸音响官方网站?  Swift中循环语句中的转移语句 break 和 continue  Laravel如何优化应用性能?(缓存和优化命令)  网站制作壁纸教程视频,电脑壁纸网站?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  高端云建站费用究竟需要多少预算?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  JS经典正则表达式笔试题汇总  如何快速上传自定义模板至建站之星?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  WEB开发之注册页面验证码倒计时代码的实现  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  android nfc常用标签读取总结  如何用PHP工具快速搭建高效网站?  如何选择可靠的免备案建站服务器?  Laravel storage目录权限问题_Laravel文件写入权限设置  js实现点击每个li节点,都弹出其文本值及修改  青岛网站建设如何选择本地服务器?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  如何基于云服务器快速搭建个人网站?