朋友出的一道算法题,大概意思是:输入任意一个数n,用二维数组打印出螺旋图案(如上左图,输入5),

我自己的主要思想是分层,由外向内,一圈为一层,然后每层又分为上右下左(top-right-bottom-left)四个方向,每个方向单独画。

过程中遇到的问题:

1.啥时候结束循环?

当(sum-1)=(n*n)时。

2.结束循环的条件判断需要在哪儿写?

刚开始我就在循环体最后面写的,然后就一直抛异常了(哎,心累),后来我就在每个方向画完后,就写了个结束循环的判断。

来直接上代码了(简单实现了下):

public static void main(String[] args) {

int n = 5;

int a[][] = luoxuan(n);

for (int i = 0; i < n; i++) {

for (int j = 0; j < n; j++) {

System.out.print(" " + a[i][j] + " ");

}

System.out.println("\n");

}

}

/**

* 螺旋展示

* @param n 任意数,负数默认为1.

* @return

*/

private static int[][] luoxuan(int n) {

if (n <= 0) {

n = 1;

}

int a[][] = new int[n][n];

int top = 0, bottom = n - 1;//上下

int left = 0, right = n - 1;//左右

int i = top, j = left;

int sum = 1;

while (true) {

//上

while (j != right + 1) {

a[i][j] = sum;

sum++;

j++;

}

j--;

if ((sum - 1) == (n * n)) {

break;//退出条件

}

top++;

i = top;

//右

while (i != bottom + 1) {

a[i][j] = sum;

sum++;

i++;

}

i--;

if ((sum - 1) == (n * n)) {

break;

}

right--;

j = right;

//下

while (j != left - 1) {

a[i][j] = sum;

sum++;

j--;

}

j++;

if ((sum - 1) == (n * n)) {

break;

}

bottom--;

i = bottom;

//左

while (i != top - 1) {

a[i][j] = sum;

sum++;

i--;

}

i++;

if ((sum - 1) == (n * n)) {

break;

}

left++;

j = left;

}

System.out.println("n="+n+",i=" + i + ",j=" + j + ",sum=" + sum);

return a;

}

java 螺旋打印_java实现:二维数组螺旋打印输出相关推荐

  1. Java IDEA Debug进制二维数组

    1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 如何加断点 选择 ...

  2. 《漫画算法2》源码整理-5 二维数组螺旋输出

    二维数组螺旋输出 public class SpiralOrder {public static List<Integer> spiralOrder(int[][] matrix) {Li ...

  3. java读取图片成rgb二维数组

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java读取图片成rgb二维数组 测试代码 public static void main(String[] args) {Color[][] a ...

  4. java二维数组矩阵_java使用二维数组开发五子棋

    主要使用到的技术: java基础语法 java面向对象思想 java数组,二维数组 java异常处理 主要步骤和思路: 1,制作一个棋盘类.棋盘类里面有行属性,列属性,二维数组属性. 有一个打印棋盘的 ...

  5. 【Java】 杨辉三角 二维数组打印杨辉三角

    Tips 打印三角的操作 : 每行打印前预留空格 打印指定数量的星号后换行 重复循环打印直至完成所有打印结果 杨辉三角: 三角规律空格最大对称值为 5 大于 5 则会变形 三角规律为当前值为上一个值加 ...

  6. java二维数组怎么看_java、二维数组详解!

    /* java 二维数组的概念 使用方法! 1.什么是二维数组? 答案:数组的数组! 他的每一个元素都是数组!二维数组是(存储一维数组的)一维数组. 2.如何定义?(以二维数组为列) int arr[ ...

  7. java语言二维数组转置_java实现二维数组转置的方法示例

    本文实例讲述了java实现二维数组转置的方法.分享给大家供大家参考,具体如下: 这里在文件中创建Test2.Exchange.Out三个类 在Exchange类中编写exchange()方法,在方法中 ...

  8. java 二维数组位置_java 找到二维数组指定元素的位置

    这个是代码编译时没有问题运行出错.主要功能是首先将txt格式文本导入二维数组,然后在二维数组中查找指定元素的行号和列号.运行结果出错显示为:importjava.util.*;importjava.i ...

  9. java txt 二维数组_java 将一个二维数组存到txt文件里,然后再读取

    java 将一个二维数组存到txt文件里,然后再读取 mip版  关注:286  答案:3  悬赏:30 解决时间 2021-01-26 21:40 已解决 2021-01-26 04:05 将一个d ...

最新文章

  1. python组成三位无重复数字_Python生成十万个无序且唯一的数字
  2. Oracle Primavera P6 R84单机版安装教程
  3. volatile、const的用法
  4. 将整张网页存成png图片
  5. 02 | 纵览全局:把握 Netty 整体架构脉络
  6. 低配本用win10服务器系统,低配电脑装win10最早版可以吗
  7. 近 10 年新秀编程语言大 PK,Pick 它!
  8. SpringSecurity系列(二) Spring Security入门
  9. 计算机注销之后一直黑屏,win7系统注销出现黑屏怎么办_win7系统注销出现黑屏的修复办法...
  10. 详解SQL2005中的AWE
  11. HDU 1754 I Hate It 线段树RMQ
  12. java 生成拼音_java 根据汉字生成拼音全拼或拼音首字母
  13. 界面设计配色方案说明图一(含RGB配色表)
  14. python实现简单购物系统
  15. 移动硬盘拒绝访问怎么修复?
  16. 关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.li)的问题
  17. StarUML for MAC 破解
  18. 基于单片机的测量心率脉搏健康系统设计与
  19. 如何进行git ssh文件的配置
  20. 哨兵2A数据的下载与处理

热门文章

  1. 德国交通标志 (若干讲解)
  2. ASP.NET实现页面跳转三种方式
  3. Java开发者该学习哪些东西提高竞争力?灵魂拷问
  4. android 椭圆轨迹旋转,Android 倾斜椭圆绘制方法
  5. Springboot毕设项目电子营业执照系统t4g7g(java+VUE+Mybatis+Maven+Mysql)
  6. LDR6023C应用于充电加听歌领域,各大转接器品牌都应用于它(LDR6023C)
  7. 今天的Django教训汇总:pyecharts可以循环叠加-20211021
  8. 【git】 全局设置用户名、密码、邮箱
  9. 都有哪些机型支持鸿蒙,支持鸿蒙系统的手机都有什么
  10. 我用YOLOv5做情感识别