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(String[] args){
		int len=4;
		int[][] arr=luoxuanStart(len);
		for(int i=0;i<len;i++){
			for(int j=0;j<len;j++)
			{
				System.out.print(+arr[i][j]+"\t");
			}
			System.out.println();
		}
	}
	public static int[][] luoxuanStart(int len){
		/*
		 * 定义一个整形方向变量,默认值为:0
		 * 0:向右;1:向下;2:向左;3:向上
		 */
		final int toRight=0;//为什么要定义成final类型
		final int toDown=1;
		final int toLeft=2;
		final int toUp=3;
		int currentDirection=toRight;

		//定义一个二维数组,用于存放二维的螺旋数组值
		int x=0,y=0;//定义二维数组的下标
		int[][] luoxuan=new int[len][len];
		for(int i=1;i<=len*len;i++){//----------------------------------for
			//给当前坐标赋值
			luoxuan[x][y]=i;
			//计算下一个正确坐标-这个坐标不一定正确,所以先将此坐标的位置
			int tempX = x;
			int tempY = y;
			//根据当前的方向确定下一个位置的坐标--------switch
			switch (currentDirection){
				case toRight:{
					tempY++;
					break;
				}
				case toDown:{
					tempX++;
					break;
				}
				case toLeft:{
					tempY--;
					break;
				}
				case toUp:{
					tempX--;
					break;
				}
			}//-----------------------------switch
				//2.2、下一个坐标如果正确,就赋值。否则,就转向,并赋值。
				/*
				 * 坐标值在正确的范围,并且该坐标未被赋过值,才是正确的坐标值
				 */
				if(tempX>=0 && tempX<len && tempY>=0 && tempY<len && luoxuan[tempX][tempY]==0){
					//如果是正确的坐标,将临时坐标赋给实际坐标
					x=tempX;
					y=tempY;
				}else{
					//开始转向 下一个方向 = (curDir+1)%4
					currentDirection=(currentDirection+1)%4;//四个方向
					switch (currentDirection){
						case toRight:{
							y++;
							break;
						}
						case toDown:{
							x++;
							break;
						}
						case toLeft:{
							y--;
							break;
						}
						case toUp:{
							x--;
							break;
						}
					}//-------------------switch
				}//-----------------------------------if
			}//------------------------------------------------------for
		return luoxuan;
	}//-----------------------------------------------------------------------luoxuanStart
}

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

时间: 2025-01-12 16:25:14

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

Java中数组的初始化方式

Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组元素分配初始值

Java中数组的定义方式

数组定义方式一 动态方式(指定数组的长度) 格式: 数组存储的数据类型[]数组名字 = new 数组存储的数据类型[长度]; [] : 表示数组. 数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组. new:关键字,创建数组使用的关键字. 数组存储的数据类型: 看创建的数组用来存储什么数据类型. [长度]:数组的长度,表示数组容器中可以存储多少个元素. 例子: 定义可以存储3个整数的数组容器,代码如下: int[] arr = new int[3]; 数组定义方式二 静态方

Java用数组实现循环队列

复习了下数据结构,用Java的数组实现一下循环队列. 队列的类 1 //循环队列 2 class CirQueue{ 3 private int QueueSize; 4 private int front; 5 private int rear; 6 private int[] queueList ; 7 8 public CirQueue(int QueueSize){ 9 this.QueueSize = QueueSize; 10 queueList = new int[QueueSiz

用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 vo

java中将一个字符数组赋值给另一个,两者同时变化

java中将一个字符数组赋值给另一个,两者的变化怎么是同步的?怎么才能让他们独立开? 比如有一个int[][] a 已经存在值,现在定义int[][] b=a;之后改变a的值,为何b也跟着改变?怎么才能那个让b不跟随a改变?如果b非变不可,我想记录下a没改变之前的值该怎么办?谢谢 如果需要b不变,就必须用for循环,使a数组的每个元素都复制到b的数组里.之所以b会随着a变化,那是因为他们指向了同一个对象.

JAVA实现数组队列,循环数组队列,链式队列

/** * 文件名:QueueText.java * 时间:2014年10月22日下午9:05:13 * 作者:修维康 */ package chapter3; /** * 类名:ArrayQueue * 说明:队列的数组实现 */ class ArrayQueue<AnyType>{ private static final int DEFAULT_CAPACITY = 10; private int front;//队头 private int rear;//队尾 private int

java基础:java环境,第一个Java程序,java的数组

java环境: 1. 什么是字节码和虚拟机? 2. 环境变量的设置 3.一些常用的java命令 4. 计算机如何运行java程序? 5. java的垃圾回收器 6. java的基本数据类型及转换 举例:第一个Java程序 Java的数组: 1. 一维数组 数组的声明 数组分配空间及初始化 数组的长度 两个数组之间的拷贝:System.arraycopy(array1,start,array2,start,length) 2. 二位数组 二维数组的声明及初始化

使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head> <meta htt

java中数组、集合、字符串之间的转换,以及用加强for循环遍历

java中数组.集合.字符串之间的转换,以及用加强for循环遍历: 1 @Test 2 public void testDemo5() { 3 ArrayList<String> list = new ArrayList<String>(); 4 list.add("甲乙1"); 5 list.add("甲乙2"); 6 list.add("甲乙3"); 7 list.add("甲乙4"); 8 //