package an.xin.er.wei;
/**
* 输入一个数,要求打出其旋转二维数组,如: 输入3 结果为: 1 8 7 2 9 6 3 4 5
*
* 输入4 结果为: 1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7
*
* @author Cuiran
* @date 2008-11-5 10:22
*
*/
public class Array2D {
/**
* @param args
*/
public static void getErWer() {
int myInt[][] = new int[5][10];
// 遍历。给数组中的每一个数组赋值
for (int i = 0; i < myInt.length; i++) {
for (int j = 0; j < myInt[0].length; j++) {
myInt[i][j] = i * j;
}
}
System.out.println("myInt.length=" + myInt.length
+ ", myInt[0].length=" + myInt[0].length);
// 输出数组每一维的下限和上限
for (int i = 0; i < myInt.length; i++) {
for (int j = 0; j < myInt[0].length; j++) {
System.out
.println("myInt[" + i + "][" + j + "]=" + myInt[i][j]);
}
}
}
/**
* 典型的蛇形矩阵刚学JAVA, 还不会使用二维数组,用一维数组模拟的 改变n就可以生成不同大小的矩阵 输入一个数
*
* @param args
*/
public static void getSnake(int n) {
int layer = 0;// 圈数有外向内
int i = 0, j = 0;// 起始位置
int direct = 1;// 初始方向,0,1,2,3---上下左右
int a[] = new int[n * n];
for (int num = 1; num <= n * n; num++) {
a[i * n + j] = num;
// 向direct指定的方向移动,遇边转向
switch (direct) {
case 1:// 下
if (++i >= n - 1 - layer) {
i = n - 1 - layer;
direct = 3;// 转右
}
break;
case 3:// 右
if (++j >= n - 1 - layer) {
j = n - 1 - layer;
direct = 0;// 转上
}
break;
case 0:// 上
if (--i <= layer) {
i = layer;
direct = 2;// 转左
}
break;
case 2:// 左
if (--j <= layer + 1) {
j = layer + 1;
direct = 1;// 转下
layer++;// 圈数加1
}
break;
default:
break;
}
}
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) {
System.out.print(a[i * n + j] + "\t");
}
System.out.println();
}
}
public static void print(long startNo, int r, int c, int n) {
long reslt;
if (c == 0) {
System.out.print(startNo + r + "\t");
} else if (c == n - 1) {
System.out.print(startNo + 3 * (n - 1) - r + "\t");
} else if (r == n - 1) {
System.out.print(startNo + r + c + "\t");
} else if (r == 0) {
System.out.print(startNo + 4 * (n - 1) - c + "\t");
} else {
startNo += n * n - (n - 2) * (n - 2);
print(startNo, r - 1, c - 1, n - 2);
}
}
/**
* 不用数组写了一个,比较灵活,就是运行起来慢一点。
*
*/
public static void getSnake2() {
int n = 10;
long startNo = 1;
long timeStart = System.currentTimeMillis();
for (int r = 0; r < n; r++) {
for (int c = 0; c < n; c++) {
print(startNo, r, c, n);
}
System.out.println();
}
long timeEnd = System.currentTimeMillis();
System.out.println("Total Time:" + (timeEnd - timeStart));
}
public static void main(String[] args) {
// getSnake(4);
getSnake2();
}
}
分享到:
相关推荐
在Java编程中,二维数组是一种常见的数据结构,用于表示矩阵或棋盘等二维空间的数据。在某些场景下,我们可能需要对二维数组进行特定的排序,例如顺时针排序或逆时针排序。顺时针排序意味着从数组的左上角开始,沿着...
本文通过实例详细讲解了在Java中实现二维数组旋转的原理和方法,希望能对有需要的朋友提供帮助。 要旋转一个二维数组,首先要明确旋转的概念。对于一个N×N的二维数组而言,我们可以将其视为一个正方形矩阵。当我们...
Java语言实现的俄罗斯方块游戏,是编程领域中一个经典的案例,它主要利用了二维数组的概念来构建游戏的逻辑。二维数组在计算机科学中广泛应用于矩阵运算、图像处理以及游戏开发等领域,尤其在构建棋盘类游戏时,如井...
螺旋数组是指按照螺旋形路径填充或遍历一个二维数组的方式。这种数据结构及其操作在实际编程应用中具有一定的实用价值,尤其是在解决某些特定问题时,如矩阵旋转、螺旋打印等。 #### 二、Java螺旋数组代码解析 本...
leetcode二维数组 编程练习 包含常见的编程网站的练习习题(leetcode、牛客等)----待完成中... 也同时包含复习面试的编程练习 该src/main/java目录下,以文件夹命名,表示的是不同的来源 每个文件均可单独运行 其他...
通常,这样的函数会接收一个二维数组作为输入,并返回一个新的二维数组表示旋转后的结果。下面是一个简单的Java方法示例: ```java public int[][] rotate(int[][] matrix) { int n = matrix.length; int[][] ...
《二维数组实现的J2ME版俄罗斯方块详解》 在移动设备的早期时代,Java 2 Micro Edition(J2ME)是开发游戏和应用程序的主流平台之一。本篇文章将深入探讨一个基于J2ME的二维数组实现的俄罗斯方块项目,让我们一起...
矩阵类的作用主要有:将二维数组转化为矩阵,矩阵的加法,矩阵的乘法; 变换类的主要方法有:平移变换、旋转变换、缩放变换、错切变换、对称变换,这些变换都是传入相关需要操作的参数来得到要进行的变换的矩阵。 ...
- **方块设计**:不同的方块由不同的形状组成,这些形状可以表示为固定大小的二维数组,便于进行旋转操作。 - **旋转算法**:当玩家尝试旋转方块时,需要有一种算法来正确地计算出旋转后的形状,同时检查旋转后...
这两个案例都是Java编程基础教学中的经典习题,它们帮助学习者理解二维数组的使用,以及如何利用循环结构控制复杂的输出格式。在实际开发中,这样的技巧广泛应用于数据处理、报表生成等场景。通过解决这类问题,...
在Java中,我们可以创建一个二维数组来表示方阵,例如: ```java int[][] d = new int[N][N]; ``` 接下来,我们需要一个递归函数来填充方阵。这个函数需要三个参数:当前数字`sum`、当前环的大小`num`以及起始位置...
通过操作二维数组,我们可以实现方块的移动、旋转以及消除行等功能。 Java Swing和AWT是Java提供的两种图形用户界面(GUI)工具包。在这个俄罗斯方块项目中,Swing或AWT被用来创建游戏窗口、绘制游戏元素以及处理...
- **方块生成与移动**: 通过`ErsBlock`类实现方块的生成、移动和旋转。 - **碰撞检测**: 监测方块与已落下方块或边界之间的碰撞。 - **消除行**: 检查是否有完整的行,若有则消除该行并更新分数。 - **游戏结束**: ...
它的实现主要涉及到二维数组表示地图、物体的移动规则、以及碰撞检测。玩家的操作需要通过事件监听来处理,而游戏状态的更新则需要在每帧中进行。这涉及到Java Swing或JavaFX等图形用户界面库的使用,以及游戏循环的...
利用Java的二维数组,我们可以轻松地存储每个格子的状态(是否有方块、方块的颜色等)。同时,游戏的主循环(GameLoop)是通过定时器来实现的,确保方块按照一定的速度下落,同时处理用户的输入和游戏逻辑。 在用户...
3. **二维数组与游戏逻辑** - 俄罗斯方块的核心是二维数组,用来表示游戏棋盘。每个元素代表一个单元格,可以为空或填充不同形状的方块。方块的生成、移动、旋转和消除都在这个二维数组上进行计算。 4. **方块的...
- **下坠物旋转算法**:下坠物的旋转涉及到4x4的二维数组的转换,根据下坠物的不同形状和旋转状态,更新3维数组的对应元素。 - **碰撞检测**:判断下坠物是否能继续下落,以及与游戏容器边缘和已有砖块的碰撞。 ...
五子棋是一种两人对弈的策略游戏,Java实现时,主要涉及二维数组来表示棋盘,每位置可存储不同的棋子类型(黑或白)。玩家轮流落子,判断胜负的关键在于实现连珠五子的检查算法。这个过程需要理解数组操作、循环...
在这个J2ME俄罗斯方块游戏中,游戏板被表示为二维数组。每个元素代表游戏板上的一个单元格,可以为空或填充有方块的一部分。当新方块生成时,它们在数组中以特定形状存储,随着游戏进行,数组中的数据会更新以反映...