黑马程序员技术交流社区
标题:
二维数组,螺旋打印
[打印本页]
作者:
潘_洋
时间:
2015-11-10 16:20
标题:
二维数组,螺旋打印
/*
* 写一方法,打印等长的二维数组,
* 要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
* 如: n = 4 则打印:
* 1 2 3 4
* 12 13 14 5
* 11 16 15 6
* 10 9 8 7
*/
import java.util.Scanner;
public class Test9 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个正整数:");
int n=sc.nextInt();
int[][] arr=new int[n][n];
//每一圈左上角数字最小
int min=1;
//圈数
int count=0;
print(n,arr,min,count);
//遍历打印二维数组
for(int[] ar : arr){
for(int a : ar){
if(a<10)
System.out.print(" "+a+" ");
else
System.out.print(a+" ");
}
System.out.println();
}
/*for(int i=0;i<n;i++){
System.out.println(Arrays.toString(arr[i])+"\t");
}*/
}
public static void print(int n,int[][] arr,int min,int count){
for (int i = 0; i <=(n-1)*4; i++) {
if (n==0) {//当输入0时直接跳出循环
System.out.println("您的输入有误");
}else{
if (n==1) {//当输入1时,打印1
arr[count][count]=min;
break;
}
}
//n-1个为一组,一共赋值4组
if(i<n-1){//第一组,向右赋值
arr[count][count+i%(n-1)] = min++;
} else if (i<(n-1)*2){//第二组,向下赋值
arr[count+i%(n-1)][count+n-1] = min++;
} else if (i<(n-1)*3) {//第三组,向左赋值
arr[count+n-1][count+n-1-i%(n-1)] = min++;
} else if (i<(n-1)*4){//第四组,向上赋值
arr[count+n-1-i%(n-1)][count] = min++;
} else {
//当一圈赋值完毕,圈数加一,边长减二,递归调用
print(n-2,arr,min,++count);
}
}
}
}
复制代码
作者:
雨来
时间:
2015-11-10 21:15
这个做过了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2