回形数

键盘读入一个整数n(1-20),以n为矩阵大小,把1,2,3,4,5…按顺时针螺旋的形式填入。

import java.util.Scanner;

public class HuiXingShu {
public static void main(String[] args) {
System.out.print("请输入一个整数:");
int lenth;
Scanner scanner = new Scanner(System.in);
lenth = scanner.nextInt();
int[][] array = new int[lenth][lenth];
int direction = 1;//判断方向,1从左往右,2从上往下,3从右往左,4从下往上。
int i = 0;
int j = 0;
int k;
for(k = 1;k <= lenth * lenth;k++) {
if(direction == 1) {
if(j < lenth && array[i][j] == 0)//不能先判断数组中元素是否为零,可能会越界
array[i][j++] = k;
else {
direction = 2;//更换方向为从上到下
k--;//这个数没有赋给数组,过了这轮循环又会加一,所以先减一
i++;//这一行已经填满数,往下挪一行
j--;//下标已经越界,往回挪一列
}
}
else if(direction == 2) {
if(i < lenth && array[i][j] == 0)//不能先判断数组中元素是否为零,可能会越界
array[i++][j] = k;
else {
direction = 3;//更换方向为从右到左
k--;//这个数没有赋给数组,过了这轮循环又会加一,所以先减一
j--;//这一列已经填满数,往左挪一列
i--;//下标已经越界,往上挪一行
}
}
else if(direction == 3) {
if(j >= 0 && array[i][j] == 0)//不能先判断数组中元素是否为零,可能会越界
array[i][j--] = k;
else {
direction = 4;//更换方向为从下到上
k--;//这个数没有赋给数组,过了这轮循环又会加一,所以先减一
i--;//这一行已经填满数,往上挪一行
j++;//下标已经越界,往回挪一列
}
}
else if(direction == 4) {
if(i >= 0 && array[i][j] == 0)//不能先判断数组中元素是否为零,可能会越界
array[i--][j] = k;
else {
direction = 1;//更换方向为从左到右
k--;//这个数没有赋给数组,过了这轮循环又会加一,所以先减一
j++;//这一列已经填满数,往右挪一列
i++;//下标已经越界,往下挪一行
}
}
}
//遍历输出
for(int[] x : array) {
for(int y : x)
System.out.printf("%3d",y);
System.out.println();
}
}
}

【Java】回形数的更多相关文章

  1. Java实现回形数,只利用数组、循环和if-else语句

    import java.util.Scanner; public class learn { public static void main(String[] args){ System.out.pr ...

  2. java參数传递机制浅析

    欢迎转载,转载请声明出处! ----------------------------------------- 前言: java语言中,參数的传递仅仅有一种机制.那就是值传递. 举例: 以下将通过几个 ...

  3. java线程数过高原因分析

    作者:鹿丸不会多项式  出处:http://www.cnblogs.com/hechao123   转载请先与我联系. 一.问题描述 前阵子我们因为B机房故障,将所有的流量切到了A机房,在经历了推送+ ...

  4. java參数传递方式问题

    java的參数传递方式到底是值传递还是引用传递,这一直是一个争论不休的问题,一直以来没有形成统一意见. 在这里,我也仅仅是说一说个人见解,不保证是对的,全当是抛砖引玉. 首先我的观点是java採用的是 ...

  5. Java參数传递方式

    原文:http://blog.sina.com.cn/s/blog_59ca2c2a0100qhjx.html,我作了些改动并添加了一个实例,添加对照 本文通过内存模型的方式来讨论一下Java中的參数 ...

  6. Java将数据以Excel文件形式导出后台代码实现

    下面代码实现所需jar包: tomcat-embed-core-8.5.11.jar: commons-lang3-3.0.1.jar: commons-io-2.5.jar: poi-3.9.jar ...

  7. java猜数游戏

    java随机数的产生 int number=(int)(Math.random()*10+1) Math.random()*n //n个随机数,从0开始 do{}while循环 //猜数,1到10的随 ...

  8. java猜数游戏(新手记录每天的作业)

    //导入包 import java.util.Scanner;import java.util.Random; //定义一个类 public class Zcs{ //公共静态的主方法 public ...

  9. JAVA取数两个数组交集,考虑重复和不重复元素

    1.考虑不重复元素,重复元素不添加 import java.awt.List; import java.util.ArrayList; import java.util.TreeSet; public ...

随机推荐

  1. TURN协议(RFC5766详解)

    如果一台主机处于NAT后面,那么在一定条件下两台主机无法之间进行通讯.在这种条件下,那么使用中继服务提供通讯是有必要的. 这个规范定义了一个名为TURN(使用中继穿越NAT)的协议,它允许一台主机使用 ...

  2. python dumps和loads

    dumps和loads的使用 import json dict = {'姓名': 'supermao','年龄': '19','爱好': '未知', '地区': '武汉'} string=json.d ...

  3. 【转】最小生成树——Kruskal算法

    [转]最小生成树--Kruskal算法 标签(空格分隔): 算法 本文是转载,原文在最小生成树-Prim算法和Kruskal算法,因为复试的时候只用到Kruskal算法即可,故这里不再涉及Prim算法 ...

  4. 【LeetCode】669. Trim a Binary Search Tree 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcod ...

  5. 【LeetCode】382. Linked List Random Node 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数组保存再随机选择 蓄水池抽样 日期 题目地址:ht ...

  6. 【剑指Offer】二叉树的深度 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 日期 题目地址:https://www.nowcoder.co ...

  7. 【LeetCode】491. Increasing Subsequences 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  8. Lucky Substrings

    而在26以内且属于fibonacci数列的数为1,2,3,5,8,13,21时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 A string s is LUCKY if ...

  9. python学习第六天:python基础(dict、set)

    dict dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度 创建&取值 为什么dict查找速度这么快? 因为 ...

  10. 「算法笔记」快速数论变换(NTT)

    一.简介 前置知识:多项式乘法与 FFT. FFT 涉及大量 double 类型数据操作和 \(\sin,\cos\) 运算,会产生误差.快速数论变换(Number Theoretic Transfo ...