急!螺旋数组!代码不知道哪错了!求指教

lxb_ccit 2011-05-08 01:02:09
package com.kaoshi;

import java.util.Scanner;

public class Shuzu {
static int count=0;

public static void fun(int n){
int i=0;
int j=0;
int flag=1; //定义标记
int [][]a=new int[n][n];
a[0][0]=count;
while(count<n*n){
switch(flag){
case 1: if(j<n){
j++;
a[i][j]=count++;

}flag=2;
case 2: if(i<n){
i++;
a[i][j]=count++;

}flag=3;
case 3: if(j>=0){
j--;
a[i][j]=count++;

}flag=4;
case 4: if(i>0){
i--;
a[i][j]=count++;

}flag=1;
}

}

for(int k1=0;k1<n;k1++){
for(int k2=0;k2<n;k2++){
System.out.print(a[k1][k2]+" ");
}
System.out.println();
}


}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入一个数");
int i=in.nextInt();
fun(i);

}

}

1表示向右,2表示向下,3表示向左,4表示向上
...全文
79 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
WoodLikeWater 2011-05-16
  • 打赏
  • 举报
回复



public static void main(String args[]){
setValue(20,20);
}

public static void setValue(int width,int height){
int nums[][] = new int[width][height];
int direction = 0;// 0:右 1:下 2:左 3:上
int ind_x = 0;
int ind_y = 0;

for (int i = 0; i < width * height; i++) {
nums[ind_x][ind_y] = i + 1;
int []p = getFuturePos(direction,ind_x,ind_y);
if(p[0] < 0 || p[0] >= width || p[1] < 0 || p[1] >= height || nums[p[0]][p[1]] != 0){
++ direction;
p = getFuturePos(direction,ind_x,ind_y);
}
ind_x = p[0];
ind_y = p[1];
}

for (int i = 0; i < nums[0].length; i++) {
for (int j = 0; j < nums[1].length; j++) {
System.out.print(nums[i][j] + "\t");
}
System.out.println();
}
}

public static int[] getFuturePos(int direction ,int x ,int y){
int []p = new int[2];
p[0] = x;
p[1] = y;
switch(direction % 4){
case 2: //左
--p[1] ;
break;
case 3://上
--p[0];
break;
case 1: //下
++p[0];
break;
case 0: //右
++p[1];
break;
}
return p;
}

lxb_ccit 2011-05-08
  • 打赏
  • 举报
回复
知道用逆时针的来给赋值,
能我我这种方法帮我改下吗
24K純帥 2011-05-08
  • 打赏
  • 举报
回复
LZ逻辑就不对啊。。
lxb_ccit 2011-05-08
  • 打赏
  • 举报
回复
修改下 count初始值为1,从1开始赋值的
Inhibitory 2011-05-08
  • 打赏
  • 举报
回复

/*
1 2 3 4 5 6 7 8 9 10
36 37 38 39 40 41 42 43 44 11
35 64 65 66 67 68 69 70 45 12
34 63 84 85 86 87 88 71 46 13
33 62 83 96 97 98 89 72 47 14
32 61 82 95 100 99 90 73 48 15
31 60 81 94 93 92 91 74 49 16
30 59 80 79 78 77 76 75 50 17
29 58 57 56 55 54 53 52 51 18
28 27 26 25 24 23 22 21 20 19
*/
public static void main(String[] args) {
final int count = 10;
final int max = count * count;
final int[][] data = new int[count][count];
int x = -1, y = 0, cur = 0;

while (cur < max) {
for (; x + 1 < count && data[x + 1][y] == 0; data[y][++x] = ++cur);
for (; y + 1 < count && data[x][y + 1] == 0; data[++y][x] = ++cur);
for (; x > 0 && data[y][x - 1] == 0; data[y][--x] = ++cur);
for (; y > 0 && data[y - 1][x] == 0; data[--y][x] = ++cur);
}

for (int i = 0; i < count; ++i) {
for (int j = 0; j < data[i].length; ++j) {
System.out.printf("%-3d ", data[i][j]);
}
System.out.println();
}
}
healer_kx 2011-05-08
  • 打赏
  • 举报
回复
我以前在Java版写过一次。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧