有关回旋数组的程序
2011-11-28 19:30
232 查看
package suanfa;
import java.util.Scanner;
/**
* 回旋数组,仿照贪吃蛇的运动轨迹
* @author dell
*
*/
public class HuiHuan {
/**
* @param args
*/
public static void main(String[] args) {
HuiHuan hh = new HuiHuan();
int[][] b = hh.initArray();
for(int i=0;i<b.length;i++){
for(int j=0;j<b[i].length;j++){
System.out.print(b[i][j]+" ");
}
System.out.println();
}
}
enum Direction {
Up, Down, Left, Right
};
public int[][] initArray() {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个小与10的数字:");
int n = s.nextInt();
int[][] array=new int[2*n-1][2*n-1];
Direction dir = Direction.Right;//初始化方向向右
int count = n+1;// 回旋次数
int rnumber = n;//向右的赋值给数数字
int unumber = n;//向上时的数字
int dnumber = n;//向下时的数字
int lnumber = n;//向左时的数字
int index = 1;
int maxRow = array.length;
int maxColums = array.length;
int minRow = 0;
int minColums = 0;
while (index < count) {
switch (dir) {
case Right:
for (int i = minColums; i < maxColums; i++) {
array[minColums][i] = rnumber;
}
rnumber--;
minRow++;
dir = Direction.Down;
break;
case Down:
for (int i = minRow; i < maxRow; i++) {
array[i][maxColums-1] = dnumber;
}
dnumber--;
maxColums--;
dir = Direction.Left;
break;
case Left:
for (int i = maxColums-1; i >= minColums; i--) {
System.out.println(i);
array[maxRow-1][i] = lnumber;
}
lnumber--;
maxRow--;
dir = Direction.Up;
break;
case Up:
for (int i = minColums; i < maxColums; i++) {
array[i][minColums] = unumber;
}
unumber--;
minColums++;
dir = Direction.Right;
index++;
break;
}
}
return array;
}
}
运行结果:
5 5 5 5 5 5 5 5 5
5 4 4 4 4 4 4 4 5
5 4 3 3 3 3 3 4 5
5 4 3 2 2 2 3 4 5
5 4 3 2 1 2 3 4 5
5 4 3 2 2 2 3 4 5
5 4 3 3 3 3 3 4 5
5 4 4 4 4 4 4 4 5
5 5 5 5 5 5 5 5 5
import java.util.Scanner;
/**
* 回旋数组,仿照贪吃蛇的运动轨迹
* @author dell
*
*/
public class HuiHuan {
/**
* @param args
*/
public static void main(String[] args) {
HuiHuan hh = new HuiHuan();
int[][] b = hh.initArray();
for(int i=0;i<b.length;i++){
for(int j=0;j<b[i].length;j++){
System.out.print(b[i][j]+" ");
}
System.out.println();
}
}
enum Direction {
Up, Down, Left, Right
};
public int[][] initArray() {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个小与10的数字:");
int n = s.nextInt();
int[][] array=new int[2*n-1][2*n-1];
Direction dir = Direction.Right;//初始化方向向右
int count = n+1;// 回旋次数
int rnumber = n;//向右的赋值给数数字
int unumber = n;//向上时的数字
int dnumber = n;//向下时的数字
int lnumber = n;//向左时的数字
int index = 1;
int maxRow = array.length;
int maxColums = array.length;
int minRow = 0;
int minColums = 0;
while (index < count) {
switch (dir) {
case Right:
for (int i = minColums; i < maxColums; i++) {
array[minColums][i] = rnumber;
}
rnumber--;
minRow++;
dir = Direction.Down;
break;
case Down:
for (int i = minRow; i < maxRow; i++) {
array[i][maxColums-1] = dnumber;
}
dnumber--;
maxColums--;
dir = Direction.Left;
break;
case Left:
for (int i = maxColums-1; i >= minColums; i--) {
System.out.println(i);
array[maxRow-1][i] = lnumber;
}
lnumber--;
maxRow--;
dir = Direction.Up;
break;
case Up:
for (int i = minColums; i < maxColums; i++) {
array[i][minColums] = unumber;
}
unumber--;
minColums++;
dir = Direction.Right;
index++;
break;
}
}
return array;
}
}
运行结果:
5 5 5 5 5 5 5 5 5
5 4 4 4 4 4 4 4 5
5 4 3 3 3 3 3 4 5
5 4 3 2 2 2 3 4 5
5 4 3 2 1 2 3 4 5
5 4 3 2 2 2 3 4 5
5 4 3 3 3 3 3 4 5
5 4 4 4 4 4 4 4 5
5 5 5 5 5 5 5 5 5
相关文章推荐
- 有关数据的基本类型和数组的几个简单程序
- 三个和数组有关的程序题目(C++)
- 三个和数组有关的程序题目(C++)
- 三个和数组有关的程序题目(C++)
- 递归实现回旋数组的小程序
- 黑马程序员——Java语言基础:程序流程控制、函数、数组
- 有关数组的几种排序
- SetLength设置动态数组长度的有关问题
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 排序数组对程序运行的影响
- 小程序(1)——输出S形数组
- 04.Java语言基本语法之程序控制、一维数组和多维数组
- Linux下的c程序---数组、malloc
- 第十四周任务1建立专门的数组类处理有关数组的操作
- 正负号标记法在数组相关程序中的使用
- [编写高质量代码:改善java程序的151个建议]建议62 警惕数组的浅拷贝
- C/C++程序中常见的与内存有关的错误
- 传入一个数组进行排列,奇数在前升序,偶数在后降序,在程序执行中不能开辟新数组空间
- 微信小程序开发之改变data中数组或对象的某一属性值
- 当程序出现这个提示的时候,是因为你一边遍历数组,又同时修改这个数组里面的内容,导致崩溃