Java_对数据外螺旋方式排列

来源:互联网 发布:linux提升用户为root 编辑:程序博客网 时间:2024/06/05 05:06
本博客为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/8875583
打印一个带星号(*)的二维数组
要求:从自然数1开始,从里向外螺旋方式排列,并在最外层包上一层星号

例如:输入n=3


输入n=4:


/*昨天下午写了很长时间都没有写好,主要还是思路混乱。睡觉的时候思路才慢慢清晰,今天测试才符合要求!Strawberry2013-5-2*/import javax.swing.JOptionPane;class Demo{private static int MAX_N = 10;//支持最大自然数为20public static void main(String[] args){int[][] val = new int[MAX_N][MAX_N];int n = getNumber("请输入自然数N");//获取自然数Nif(n<=MAX_N && n>=1)//判断自然数N的有效范围{if(n%2 == 1)exec(val, 0, n-1, n);elseexec(val, n-1, 0, n);}show(val, n);}public static void exec(int[][] val, int m, int n, int len){int i, key;//exec(val, m, n, len) ->m,n分别代表目标点的横纵坐标 len表示该目标运动的长度;if (len%2 == 0)key = 1;//判断运动的方向 key=1表示向右或者向上 key=-1表示相反方向elsekey = -1;for(i=0; i <= len-1; i++){val[m][n+key*i] = len*len - i;}int temp = val[m][n+key*(len-1)];//存储拐点的val值for(i=0; i<=len-1; i++){val[m-key*i][n+key*(len-1)] = temp - i;}if (len == 1)return;exec(val, m-key*(len-1), n+key*(len-2), len-1);}public static void show(int[][] val, int n)//打印信息{for(int i=0; i<n; i++){for(int j=0; j<n; j++){if(val[i][j] != 0)System.out.print(val[i][j]+"\t");}System.out.println("\n");}}public static int getNumber(String message)//获取自然数n值{int number = 0;String str = JOptionPane.showInputDialog(null, message, "提示",JOptionPane.INFORMATION_MESSAGE);try{number = Integer.parseInt(str); // 得到输入的正整数}catch( Exception e){JOptionPane.showMessageDialog(null, "输入非数字字符\n程序结束", "错误警告", JOptionPane.ERROR_MESSAGE);return -1; // 输入的不是数字字符,程序结束}if (number < 1 || number > MAX_N){JOptionPane.showMessageDialog(null, "自然数N范围为:1-"+MAX_N+"\n程序结束", "错误警告",JOptionPane.ERROR_MESSAGE);return -1; // 输入的数不在范围,程序结束 } else return number;}}


原创粉丝点击