- 浏览: 465897 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
ty1972873004:
sunwang810812 写道我运行了这个例子,怎么结果是这 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
lgh1992314:
simpleDean 写道请问,Logger.setLevel ...
Java内置Logger详解 -
sunwang810812:
我运行了这个例子,怎么结果是这样的:2号车泊车6号车泊车5号车 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
jp260715007:
nanjiwubing123 写道参考你的用法,用如下方式实现 ...
面试题--三个线程循环打印ABC10次的几种解决方法 -
cb_0312:
SurnameDictionary文章我没看完,现在懂了
中文排序
生成一个连续数字的旋转二维数组,起始位置位于左上角,然后从起始位置开始递增,按照顺时针或者逆时针从外向里将连续的数组存入二维数组中,并输出生成的旋转二维数组。
测试代码:
输出结果:
下面在显示一个大小为34*34的旋转二维数组:
/** * * <code>ConvolutionalArray</code>主要是用来输出一个旋转式样的二维数组。 * * * 此二维数组由连续的数字组成,比如: * * * int i=5; * 1 2 3 4 5 * 16 17 18 19 6 * 15 24 25 20 7 * 14 23 22 21 8 * 13 12 11 10 9 * int i=6 * 1 2 3 4 5 6 * 20 21 22 23 24 7 * 19 32 33 34 25 8 * 18 31 36 35 26 9 * 17 30 29 28 27 10 * 16 15 14 13 12 11 * * * @author Eric * @version 1.0 * */ public class ConvolutionalArray { private static final int DEFAULT_NUMBER = 5; // 定义连续数字添加的方向 private enum Direction { Right, Down, Left, Up; } // 保存当前处理的方向,默认一开始是向右的。 private Direction currentDirection = Direction.Right; // 将一个二维数组看成X, Y两个方向,记录下,最小的X,Y值以及最大的X,Y private int minX = 0; private int minY = 0; private int maxX = DEFAULT_NUMBER - 1; private int maxY = DEFAULT_NUMBER - 1; private int currentCount = 0; /** * 打印数组。 * * @param expectedNumber : * 期望的二维数组每行显示的个数。 */ public void printArray(int expectedNumber) { int[][] array = buildArray(expectedNumber); printArray(array, expectedNumber); } /** * * @param expectedNumber: * 期望的二维数组每行显示的个数。 * @return: 返回一个连续数字组成的二维数组。 */ private int[][] buildArray(int expectedNumber) { int[][] result = new int[expectedNumber][expectedNumber]; // Total number of numeric values int count = expectedNumber * expectedNumber; // Reset max value for maxX and maxY. maxY = expectedNumber - 1; maxX = expectedNumber - 1; /* * 如果要生成一个nxn的二维数组,那么里面的最大数应该是n*n, 当处理的数字还没有达到这个最大值,一直循环处理下去。 * */ while (currentCount < count) { /* * 因为开始默认的方向是Right,也就是顺时针方向,所以,处理的顺序是 Right -> Down -> Left -> Up * ->Right ... 每次一个方向填充值之后,需要先判断当前数据是否达到最大值。 */ if (currentCount < count) { processRight(result); } if (currentCount < count) { processDown(result); } if (currentCount < count) { processLeft(result); } if (currentCount < count) { processUp(result); } } return result; } /** * 向右方向填充数据。 */ private void processRight(int[][] currentArray) { for (int i = minX; i <= maxX; i++) { currentArray[minY][i] = ++currentCount; } changeDirection(); minY++; } /** * 向下方向填充数据。 */ private void processDown(int[][] currentArray) { for (int i = minY; i <= maxY; i++) { currentArray[i][maxX] = ++currentCount; } changeDirection(); maxX--; } /** * 向左方向填充数据。 */ private void processLeft(int[][] currentArray) { for (int i = maxX; i >= minX; i--) { currentArray[maxY][i] = ++currentCount; } changeDirection(); maxY--; } /** * 向上方向填充数据。 */ private void processUp(int[][] currentArray) { for (int i = maxY; i >= minY; i--) { currentArray[i][minX] = ++currentCount; } changeDirection(); minX++; } /** * 打印二维数组的内容。 * * @param array * @param expectedNumber */ private void printArray(int[][] array, int expectedNumber) { for (int i = 0; i < expectedNumber; i++) { for (int j = 0; j < expectedNumber; j++) { System.out.print(appendSpace(array[i][j], expectedNumber)); } System.out.println(); } } /** * 为了保证数据输出时能够对齐,添加一些空格. */ private String appendSpace(int value, int expectedNumber) { int maxValue = expectedNumber * expectedNumber; int maxLength = String.valueOf(maxValue).length(); int currentValueLength = String.valueOf(value).length(); StringBuilder sb = new StringBuilder(); sb.append(value); for (int i = maxLength; i > currentValueLength; i--) { sb.append(" "); } sb.append(" "); return sb.toString(); } /** * 改变当前的方向。 */ private void changeDirection() { switch (currentDirection) { case Right: currentDirection = Direction.Down; break; case Down: currentDirection = Direction.Left; break; case Left: currentDirection = Direction.Up; break; case Up: currentDirection = Direction.Right; break; } } /** * 在一个二维数组基础上,以对角线为对称线,实现两侧数据的交换,并返回这个交换数据后的二维数组。 * * 这样做有一个用处:比如已经有一个向右的二维旋转数组(向右): * 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 采用此方法之后,可以得到一个向下方向的二维旋转数组(向下) 1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7 */ private int[][] exchangeArray(int[][] originalArray, int expectedNumber) { int[][] exchangedArray = new int[expectedNumber][expectedNumber]; for (int i = 0; i < expectedNumber; i++) { for (int j = 0; j < expectedNumber; j++) { exchangedArray[i][j] = originalArray[j][i]; } } return exchangedArray; } /** * 打印交换数据后的二维数组。 */ public void printExchangedArray(int expectedNumber) { int[][] array = buildArray(expectedNumber); printArray(exchangeArray(array, expectedNumber), expectedNumber); } }
测试代码:
public class Test { public static void main(String[] args) { for (int i = 5; i < 11; i++) { System.out.println("Direction: Right; int = " + i); new ConvolutionalArray().printArray(i); System.out.println(); System.out.println("Direction: Down; int = " + i); new ConvolutionalArray().printExchangedArray(i); System.out.println(); } } }
输出结果:
下面在显示一个大小为34*34的旋转二维数组:
发表评论
-
工厂类中移除if/else语句
2016-07-10 19:52 900面向对象语言的一个强大的特性是多态,它可以用来在代码中移除 ... -
Java编程练手100题
2014-12-11 17:13 6728本文给出100道Java编程练手的程序。 列表如下: 面 ... -
数组复制的三种方法
2014-11-30 12:57 2212本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
数组复制的三种方法
2014-11-30 12:54 0本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
四种复制文件的方法
2014-11-29 13:21 1738尽管Java提供了一个类ava.io.File用于文件的操 ... -
判断一个字符串中的字符是否都只出现一次
2014-11-25 12:58 2724本篇博文将给大家带来几个判断一个字符串中的字符是否都只出现一 ... -
使用正则表达式判断一个数是否为素数
2014-11-23 13:35 2166正则表达式能够用于判断一个数是否为素数,这个以前完全没有想过 ... -
几个可以用英文单词表达的正则表达式
2014-11-21 13:12 3748本文,我们将来看一下几个可以用英文单词表达的正则表达式。这些 ... -
(广度优先搜索)打印所有可能的括号组合
2014-11-20 11:58 1953问题:给定一个正整n,作为括号的对数,输出所有括号可能 ... -
随机产生由特殊字符,大小写字母以及数字组成的字符串,且每种字符都至少出现一次
2014-11-19 14:48 3976题目:随机产生字符串,字符串中的字符只能由特殊字符 (! ... -
找出1到n缺失的一个数
2014-11-18 12:57 3173题目:Problem description: You h ... -
EnumSet的几个例子
2014-11-14 16:24 8749EnumSet 是一个与枚举类型一起使用的专用 Set 实现 ... -
给定两个有序数组和一个指定的sum值,从两个数组中各找一个数使得这两个数的和与指定的sum值相差最小
2014-11-12 11:24 3327题目:给定两个有序数组和一个指定的sum值,从两个数组 ... -
Java面试编程题练手
2014-11-04 22:49 6700面试编程 写一个程序,去除有序数组中的重复数字 编 ... -
Collections用法整理
2014-10-22 20:55 9845Collections (java.util.Collect ... -
The Code Sample 代码实例 个人博客开通
2014-09-04 18:48 1417个人博客小站开通 http://thecodesample. ... -
Collections.emptyXXX方法
2014-06-08 13:37 2144从JDK 1.5开始, Collections集合工具类中预先 ... -
这代码怎么就打印出"hello world"了呢?
2014-06-08 00:37 7395for (long l = 4946144450195624L ... -
最短时间过桥
2014-04-21 22:03 4136本文用代码实现最短时间过桥,并且打印如下两个例子的最小过桥时间 ... -
将数组分割成差值最小的子集
2014-04-20 22:34 2898本文使用位掩码实现一个功能 ==》将数组分割成差值最小的子集 ...
相关推荐
leetcode二维数组 编程练习 包含常见的编程网站的练习习题(leetcode、牛客等)----待完成中... 也同时包含复习面试的编程练习 该src/main/java目录下,以文件夹命名,表示的是不同的来源 每个文件均可单独运行 其他...
- **二维数组**: 使用二维数组来存储原始数据和旋转后的数据。 - **循环嵌套**: 使用两层`for`循环来读取和旋转数据。 - **输出格式控制**: 控制输出格式,使得数据以4行4列的形式展示。 - **代码分析**: - 创建...
读取二维数组所有数据 调用C-动态数据库 贪食蛇 这个程序演示利用队列来实现数据的传引用 远程开启VI 连续写入文件 键盘控制TAB控件 黑白棋程序 Excel相关 Google_Earth和LV labview8.6如你所愿 labview8.6自动连接...
在C语言中,矩阵运算通常通过二维数组实现。要进行矩阵旋转,首先需要定义一个函数,接受原始矩阵、旋转轴和旋转角度作为参数。然后根据旋转类型,利用旋转公式更新矩阵元素。最后,返回旋转后的矩阵。 4. **...
25. **二维数组中的查找**:二维数组的查找通常涉及到行优先或列优先遍历,根据具体问题选择合适策略。 这些题目覆盖了算法的多个方面,通过它们可以提高逻辑思维能力和编程技巧,对于准备面试和提升编程能力非常有...
4. **图像的表示**:图像可以用一维数组(行优先或列优先)或二维数组(矩阵形式)来表示。对于彩色图像,每个像素通常由红、绿、蓝三个分量表示。 5. **图像的基本操作**:包括平移、旋转、缩放等几何变换,以及...
- **数组标记**:使用二维数组记录每个格子的状态(数字、雷、未知)。 - **邻接计算**:找出每个格子周围的雷数,这需要邻接矩阵或邻接表。 - **点击事件**:处理用户的点击操作,包括翻开格子、标记雷区。 - *...
在一个每行按从左到右递增、每列按从上到下递增排列的二维数组中,我们需要编写一个函数来判断是否存在特定的整数。这个问题可以通过双指针方法解决,分别控制行指针(r1, r2)和列指针(c1, c2),根据目标值与...
- 二维数组:使用二维数组存储矩阵数据。 - 矩阵旋转:理解如何实现矩阵的旋转操作。 - 数据输出:学习如何按行列顺序输出二维数组中的数据。 ### 5. 十进制转其他进制 #### 题目描述: 编写一个程序,将一个十进制...
这些模式可以是二维数组,每个元素代表一个LED的状态。当需要显示某个字符时,程序会按照预设的模式控制LED阵列的亮灭。 然后,涉及到的是定时器和中断服务函数的使用。为了实现动态显示,程序需要精确地控制LED的...
二维数组中查找目标值、4.替换字符串中的空格。5.从尾到头打印链表.6.由前序和中序遍历重建二叉树.7.用两个栈实现队列8.求旋转数组的最小数字、9.斐波那契数列的第n项(青蛙跳台阶)10.二进制中1的个数、11.数值的整数...
2. 图像表示:图像通常用二维数组表示,数组中的每个元素称为像素,其值代表该位置的亮度或颜色强度。 二、图像数字化 1. 扫描与采样:将连续图像转换为离散图像的过程称为扫描,通过在空间上设置采样点来实现。 2...
图像可以视为二维数组,其中每个元素(像素)都有一个数值,代表该位置的颜色或亮度信息。图像的表示方式包括灰度图像、彩色图像(如RGB模型)以及索引颜色图像等。图像的数字化过程包括采样和量化,这两个步骤将...
在计算机中,图像以二维数组的形式存储,便于进行各种计算操作。 图像变换是数字图像处理的重要一环,它涉及图像的位置、尺度、角度和形状改变。常见的图像变换有平移、旋转、缩放、剪切等。例如,傅立叶变换是一种...
"行主序"和"列主序"是指存储和处理二维数组,尤其是矩阵时采用的不同策略。这两种方式主要应用于线性代数和图形编程,有助于提高运算效率。 首先,我们要理解什么是矩阵。矩阵是一个由有序元素(通常是数字)构成的...
1. 图像像素:图像的基本组成单元,通常用二维数组表示。 2. 灰度级:灰度图像中的每个像素用一个整数或浮点数表示其亮度级别。 3. 颜色空间:RGB、HSV、YCbCr等,它们提供了不同的方式来表示彩色图像。 四、图像...
1. **图像基础知识**:在第一章,作者介绍了图像的基本概念,包括图像的类型(如灰度图像、彩色图像)、像素的概念、图像的表示方法(如一维数组、二维数组)以及图像的几何属性(如分辨率、尺寸)。 2. **图像数字...
1. 图像基础知识:包括图像的类型(如灰度图像、彩色图像)、像素的概念、图像的表示方法(如二维数组、像素强度值)以及图像的几何属性(如分辨率、尺寸)。 2. 图像的数字化:涉及图像采样和量化,这两个过程是将...
可能涉及到的知识点有:二维数组,欧几里得距离,线性代数基础。 2. **华为 - 旋转蛇形矩阵.c** 这是一个经典的矩阵操作问题,通常要求按照“之”字形顺序填充或打印矩阵。涉及的知识点包括:多维数组的操作,循环...