用java实现螺旋数组

接收数组的行数和列数,返回正序和倒序的螺旋数组

package cn.baokx;

public class Test {
	public static void main(String[] args) {
		printArray(getSpiralArray(5,5,false));
		System.out.println("**************");
		printArray(getSpiralArray(5,5,true));
	}
	//打印二维数组
	public static void printArray(int [][] array){
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[0].length; j++) {
	  			if(array[i][j]<10){
	  				System.out.print("0");
	  			}
	  			System.out.print(array[i][j] + " ");
			}
			System.out.println();
		}
	}
	//返回螺旋数组
	public static int [][] getSpiralArray(int m,int n,boolean reverse){
		//定义一个长度为m*n的数组,并按顺序初始化
		int [] numArray = new int[m*n];
		for(int i = 0 ; i < numArray.length ; i++){
			numArray[i] = (i+1);
		}
		//初始化数组下标
		int foot = reverse?numArray.length-1:0;

		//声明螺旋数组
		int[][] array = new int[m][n];
		//计算"层数",以m和n中较小的数为准
		int layer = m<n?m:n;
		layer = (layer%2==1)?(layer / 2 + 1):(layer / 2);

		// 从外层到里层循环
		for (int i = 0; i < layer; i++) {
			//从左到右
			for (int j = i; j < n - i; j++) {
				array[i][j] = numArray[foot];
				foot = reverse?foot-1:foot+1;
				if(foot<0||foot>m*n){
					return array;
				}
			}
			// 从上到下
			for (int j = i + 1;  j < m - i; j++) {
				array[j][n - i - 1] = numArray[foot];
				foot = reverse?foot-1:foot+1;
				if(foot<0||foot>m*n){
					return array;
				}
			}
			// 从右到左
			for (int j = n - i - 2; j >= i; j--) {
				array[m - i - 1][j] = numArray[foot];
				foot = reverse?foot-1:foot+1;
				if(foot<0||foot>m*n){
					return array;
				}
			}
			// 从下到上
			for (int j = m - i - 2; j > i; j--) {
				array[j][i] = numArray[foot];
				foot = reverse?foot-1:foot+1;
				if(foot<0||foot>m*n){
					return array;
				}
			}
		}
		return array;
	}
}
时间: 2024-08-23 14:40:11

用java实现螺旋数组的相关文章

Java 螺旋数组的实现方式-一个循环实现哦

随着编程的学习和工作,感触越来越深的,就是如何做好对需求的理解.那么在学习的过程中,就是如何将一个实际问题,转化成计算机语言去实现.我觉得我的这方面的能力很是欠缺啊. 今天分享一下一个螺旋数组例子的分析: 贴上code: package excesize; /* * 螺旋数组: * 4 * 1 2 3 4 * 12 13 14 5 * 11 16 15 6 * 10 9 8 7 */ public class LuoxuanArray { public static void main(Stri

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];    

java随机数与数组的使用。

java随机数与数组的使用.    一:题目 二 代码:  public class Students {    int number;  // 学号    int State ;   // 年级    int Score ;    // 成绩         public Students(int number, int state, int score) {        super();        this.number = number;        State = state; 

透过字节码分析java基本类型数组的内存分配方式。

我们知道java中new方式创建的对象都是在堆中创建的,而局部变量对应的值存放在栈上.那么java中的int [] arr={1,2,3}是存放在什么地方的呢,int []arr = new int[3]又是存放在什么地方的呢, 下面我们通过编写两个小例子,通过查看生成的字节码文件,来了解jvm会如何来处理这两种情况的. 1.int[] arr = new int[3]示例 public class ArrayTest { public static void main(String[] arg

慕课网-安卓工程师初养成-6-3 如何使用 Java 中的数组

来源:http://www.imooc.com/code/1525 Java 中操作数组只需要四个步骤: 1. 声明数组 语法:  或者  其中,数组名可以是任意合法的变量名,如: 2. 分配空间 简单地说,就是指定数组中最多可存储多少个元素 语法:  其中,数组长度就是数组中能存放元素的个数,如: 话说,我们也可以将上面的两个步骤合并,在声明数组的同时为它分配空间,如: 3. 赋值 分配空间后就可以向数组中放数据了,数组中元素都是通过下标来访问的,例如向 scores 数组中存放学生成绩 4.

在Java中判断数组中包含某个元素的几种方式的比较

闲来无事,将java中判断数组中包含某个元素的几种方式的速度进行对比,直接上代码 talk is cheap, show you the code package test.contain.lishaojie; import java.util.Arrays;import java.util.HashSet;import java.util.Set; public class TestContain { /** * @param args */ public static void main(S

Java基础:数组

转载请注明出处:jiq?钦's technical Blog 一.数组初始化 无论如何,当你要实例化一个数组对象的时候,必须要指定其大小. 不能在提供了initializer的情况下再去指定数组的维度!!! 正确的初始化方式有: 方式1:Int[][] array =new int[][]{{1,2},{3,4},{5},{2,4,2,1}}; 方式2:Int[][] array ={{1,2},{3,4},{5},{2,4,2,1}}; 方式3: Int[][] array =new int[

【转】java中byte数组与int类型的转换(两种方式)----不错

原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. 第一种方法: public static byte[] int2byte(int

java学习之数组(二)

学编程吧java数组学习(二)发布了,欢迎大家通过xuebiancheng8.com来访问. 下面接着来分析数组,前面分析了什么是数组,为什么要用数组,下面来分析下如何使用数组 数组和其他数据类型一样,使用前要先定义.如下 int a[];这样就声明了一个数组 a = new int[10];然后为这个数组申请10个大小的空间 a[0] = 1; a[1] = 2; ....等等来为数组 赋值,为数组赋值完成后就可以通过下标来访问数组 当然数组在定义的时候也可以讲上面操作合并即 int a []