`
xifangyuhui
  • 浏览: 188575 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

螺旋数组的java实现

阅读更多

螺旋数组
要求:存储和输出nXm的螺旋数组,其中n和m为大于0的整数。
         以下是一些螺旋数组的示例:
            1        2   3  4                      1   2   3  4   5
12 13 14 5                      14 15 16 17 6
11 16 15 6                      13 20 19 18 7
10 9   8   7                      12 11 10 9  8
4X4螺旋数组                        4X5螺旋数组
         对于螺旋数组来说,其中的数值很有规则,就是按照旋转的结构数值每次加1,实现该功能需要对数组和流程控制有角深刻的认识。
         实现思路:声明一个变量来代表需要为数组元素赋的值,对于其中的数字来说,每个数字都有一个移动方向,这个方向指向下一个元素,根据该方向改变数组的下标,如果到达边界或指向的元素已经赋值,则改变方向。
   实现代码如下:
                   int n = 4;
                   int m = 5;
                   int[][] data = new int[n][m];
                   int dire;   //当前数字的移动方向
                   final int UP = 0;   //上
                   final int DOWN = 1; //下
                   final int LEFT = 2; //左
                   final int RIGHT = 3;//右
                   dire = RIGHT;
                   int value = 1;    //数组元素的值
                   int row = 0;     //第一维下标
                   int col = 0;     //第二维下标
                   data[0][0] = 1; //初始化第一个元素
                   while(value < n * m){
                            switch(dire){
                                     case UP:
                                               row--; //移动到上一行
                                               if(row < 0){ //超过边界
                                                        row++; //后退
                                                        dire = RIGHT;
                                                        continue; //跳过该次循环
                                               }else if(data[row][col] != 0){//已赋值
                                                        row++; //后退
                                                        dire = RIGHT;
                                                        continue; //跳过该次循环
                                               }
                                               break;
                                     case DOWN:
                                               row++; //移动到下一行
                                               if(row >= n){ //超过边界
                                                        row--; //后退
                                                        dire = LEFT;
                                                        continue; //跳过该次循环
                                               }else if(data[row][col] != 0){//已赋值
                                                        row--; //后退
                                                        dire = LEFT;
                                                        continue; //跳过该次循环
                                               }
                                               break;
                                     case LEFT:
                                               col--; //移动到前一列
                                               if(col < 0){ //超过边界
                                                        col++; //后退
                                                        dire = UP;
                                                        continue; //跳过该次循环
                                               }else if(data[row][col] != 0){//已赋值
                                                        col++; //后退
                                                        dire = UP;
                                                        continue; //跳过该次循环
                                               }
                                               break;
                                     case RIGHT:
                                               col++; //移动到后一行
                                               if(col >= m){ //超过边界
                                                        col--; //后退
                                                        dire = DOWN;
                                                        continue; //跳过该次循环
                                               }else if(data[row][col] != 0){//已赋值
                                                        col--; //后退
                                                        dire = DOWN;
                                                        continue; //跳过该次循环
                                               }
                                               break;
                            }
                            value++; //数值增加1
                            data[row][col] = value;//赋值                    
                   }
                   //输出数组中的元素
                   for(int i = 0;i < data.length;i++){
                            for(int j = 0;j < data[i].length;j++){
                                     if(data[i][j] < 10){//右对齐
                                               System.out.print(' ');
                                     }
                                     System.out.print(data[i][j]);
                                     System.out.print(' ');
                            }
                            System.out.println();
                   }
 

                           在该代码中dire代表当前元素的移动方向,每个根据该变量的值实现移动,如果移动时超出边界或移动到的位置已赋值,则改变方向,并跳过本次循环,如果移动成功,则数值增加1,对数组元素进行赋值。

 

分享到:
评论

相关推荐

    java螺旋数组代码

    ### Java螺旋数组实现详解 #### 一、螺旋数组概述 螺旋数组是指按照螺旋形路径填充或遍历一个二维数组的方式。这种数据结构及其操作在实际编程应用中具有一定的实用价值,尤其是在解决某些特定问题时,如矩阵旋转...

    螺旋数组的java实现----------------------------------------

    螺旋数组的java实现-----------------------------------------------------------------------------------------------------------

    螺旋数组 java下载

    java螺旋数组有关Java面向对象编程指南 Java面向对象编程指南

    打印螺旋数组(新手编的)

    大家都来下下..改进改进 我没积分了...我要下东西.... 大家都支持支持...

    用二维数组打印螺旋方阵 JAVA入门之数组

    这是一个JAVA中关于二维数组的拔高题。

    JAVA蛇形数组(向下开始)

    在编程领域,蛇形数组(也称为锯齿形数组或螺旋数组)是一种特殊的二维数组布局,其中元素按照从左到右、从上到下、再从右到左、从下到上的顺序填充,形成类似蛇行的路径。这种布局常用于解决特定问题,如数据存储和...

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

    本篇文章将详细讲解如何利用Java实现这个功能。 首先,我们需要理解螺旋数组的规律。螺旋数组从左上角开始,沿着顺时针方向依次填充数字。当一行或一列填满后,数组的遍历会转向下一圈。例如,对于5x5的数组,其...

    java实现螺旋数据

    标题“Java实现螺旋数据”指的是在Java编程中创建一种特殊的数据结构,该结构按照螺旋顺序填充数字。描述进一步解释了具体实现方式:用户通过键盘输入一个介于1到20之间的整数,这个数字将决定矩阵的大小。然后,...

    JAVA实现螺旋矩阵

    总的来说,Java实现螺旋矩阵的关键在于理解螺旋填充的规律,以及有效地处理边界条件和方向切换。在实际编程中,可以将这个逻辑封装成一个方法,以便在其他地方复用。同时,注意代码的可读性和注释的清晰性,这对于...

    Java实现n阶螺旋方阵

    在Java中实现n阶螺旋方阵是一项常见的编程任务,这有助于理解和掌握数组的操作以及循环控制结构的使用。下面我们将深入探讨如何用Java来实现这个功能。 首先,我们需要了解螺旋矩阵的基本概念。假设我们有一个n阶的...

    螺旋式遍历二维数组(矩阵)Demo

    以下是一个简单的Java实现,即`SpiralMatrix.java`文件可能包含的代码: ```java public class SpiralMatrix { public static void spiralPrint(int[][] matrix) { if (matrix == null || matrix.length == 0) ...

    螺旋矩阵 java

    本文详细介绍了如何使用Java实现螺旋矩阵的生成。通过对核心变量和算法流程的分析,我们不仅理解了螺旋矩阵的基本概念,还学会了如何编写相应的程序来生成这种特殊的矩阵。未来可以通过探索不同的变体或扩展功能来...

    java编写的螺旋矩阵很经典

    下面我们将详细探讨螺旋矩阵的原理、Java实现方法以及相关知识点。 首先,让我们理解螺旋矩阵的概念。假设我们有一个n×n的二维数组,我们从左上角开始,沿着顺时针方向填充数字。当行或列到达边界后,我们会转向下...

    JAVA螺旋方阵

    #### Java实现螺旋方阵的步骤 实现螺旋方阵的关键在于理解如何按照螺旋顺序填充数组。以下为具体步骤: 1. **初始化**:创建一个N x N的二维数组。 2. **边界设定**:定义边界变量,如上、下、左、右边界。 3. **...

    java实现贪吃蛇.doc

    "java实现贪吃蛇游戏" 本文是关于使用 Java 实现的一个贪吃蛇游戏的论文,论文主要介绍了游戏的开发过程和实现细节。下面是从论文中提取的相关知识点: 一、游戏开发环境 * 开发工具:Eclipse * 应用环境:WINXP ...

    java输出螺旋方阵

    编程输出螺旋方阵. 螺旋方阵是指将从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。如4阶的螺旋方阵形式如下: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 要求:1)从键盘输入螺旋方阵的阶数

    java旋转二维数组实例

    `arrprint` 方法则用于打印二维数组的内容,使我们可以看到生成的螺旋数组。 `specArr` 方法的核心逻辑在于使用一个循环,每次循环处理一层数组的四个边(上、右、下、左),并根据当前边的位置填充值。`len` 表示...

    n阶幻方Java实现

    【标题】"n阶幻方Java实现"涉及的是在编程领域中使用Java语言来构建n阶幻方的算法。幻方是一种古老的数学游戏,它的基本原理是将1到n²的数字填入一个n×n的方格表中,使得每行、每列以及两条对角线上的数字之和都...

    打印数字螺旋图案的 Java 程序.docx

    在 Java 编程中,打印数字螺旋图案是一项常见的练习,它有助于理解二维数组的遍历和控制流程。以下是一个简单的 Java 程序,用于根据给定的矩阵大小 `n` 打印出螺旋图案。这个程序的核心逻辑是通过一个二维数组 `...

    Java实现输出回环数(螺旋矩阵)的方法示例

    在本文中,我们主要介绍了Java实现输出回环数(螺旋矩阵)的方法,涉及java针对数组的遍历、判断、输出等相关操作技巧。 数组遍历是Java编程中最基本的操作之一,数组是一种数据结构,可以存储大量的数据。Java提供了...

Global site tag (gtag.js) - Google Analytics