日期:2014-05-20 浏览次数:21063 次
/*
* 在n*n的循环中:
* 1 代表 从左向右 的方向
* -1 代表 从上到下 的方向
* -2 代表的是 从右向左 的方向
* 2 代表的是 从下向上 的方向
* 首先是: 从左向右赋值,作为第一行来说,只在判断col+1<n就可以了
* 考虑到其他行,所以还要加上&&value[row][col+1]==0其他行也是同理
* 当到了最后一列,或是某一列已经有值了,更改方向,从上向下
* 从上向下,到了最后一行,或是某一行已有值了,再次更改方法,依此类推
* 注意!!
* 不同的方向,边界值不同。是n还是0区分清。
* 不同的方向,行与列的变量,是++还是--区分清。
* 方向的标识值,分清
*/
import java.util.Scanner;
public class q {
public static void main(String[] args) {
Scanner input = new Scanner (System.in);
System.out.println("输入数字:");
int n = input.nextInt();//取得输入的数字
//int a [][]=new int [5][3];
//a[0][0],a[0][1],a[0][2];
//a[1][0],a[1][1],a[1][2];
//a[2][0],a[2][1],a[2][2];
//a[3][0],a[3][1],a[3][2];
//a[4][0],a[4][1],a[4][2];
//
int[][] shuzu = new int [n][n];//创建一个n*n的数组,充当矩阵
//int direction = 1; //位置
int weizhi = 1 ;
//int row = 0 ;//int数组的初始化值为0,所以value[row][col]==0//行
int hang = 0 ;
int lie = 0 ;//...同上//列
for (int i = 0;i<n*n;i++){
if (shuzu[hang][lie]==0){
shuzu[hang][lie]=i+1; //求解释
if (weizhi==1){ //位置:1 代表 从左向右 的方向
if(lie+1<n &&shuzu[hang][lie+1]==0){//求解释
lie++;
} else {
weizhi=-2;
hang++;
}
}
else if (weizhi==-2){ //位置:-2 代表 从右向左 的方向
if (hang+1<n&& shuzu[hang+1][lie]==0){//求解释
hang++;
}else{
weizhi=-1;
lie--;
}
} else if (weizhi==-1){ //位置:-1 代表 从上到下 的方向
if (lie-1>=0 && shuzu[hang][lie-1]==0){//求解释
lie--;
}else {
weizhi=2;
hang--;
}
}else {
if (hang-1>=0&&shuzu[hang-1][lie]==0){ //求解释
hang--;
}else{
weizhi=1;
lie++;
}
}
}
}
for (int i =0;i<n;i++){
for (int j=0;j<n;j++ ){
if (j==0){
System.out.print(shuzu[i][j]+"\t");
} else {
System.out.print(""+shuzu[i][j]+"\t");
}
}
System.out.println();
}
}
}
int lie = 0 ; //初始化列数
------解决方案--------------------
import java.util.Scanner;
public class Skin {
public static void main(String[] args) {
Scanner input = new Scanner (System.in);
System.out.println("输入数字:");
int n = input.nextInt();//取得输入的数字
int[][] shuzu = new int [n][n];//创建一个n*n的数组,充当矩阵
//int direction = 1; //位置
int weizhi = 1 ;
//int row = 0 ;//int数组的初始化值为0,所以value[row][col]==0//行
int hang = 0;
int lie = 0 ;//...同上//列
for (int i = 0;i<n*n;i++){//执行n*n次
if (shuzu[hang][lie]==0){
shuzu[hang][lie]=i+1; //被指定的数组元素等于i+1
if (weizhi==1){ //位置:1 代表 从左向右 的方向
if(lie+1<n &&shuzu[hang][lie+1]==0){
//水平方向上 lie + 1 < n 防止后面数组越界
lie++;
} else {
weizhi = - 2;//如果 水平到头,转向竖直方向
hang++;//转到竖直方向,hang+1
}
}
else if (weizhi==-2){ //位置:-2 代表 从右向左 的方向
if (hang+1<n&& shuzu[hang+1][lie]==0){
//竖直方向上 hang + 1 < n ,数组越界,加限制条件
hang++;
}else{
weizhi=-1;
lie--;//转到水平,lie - 1
}
} else if (weizhi==-1){ //位置:-1 代表 从上到下 的方向
if (lie-1>=0 && shuzu[hang][lie-1]==0){
//如果lie - 1 < 0,数组越界,加限制条件
lie--;
}else {
weizhi=2;
hang--;
}
}else {//位置:2 代表 从下到上 的方向
if (hang-1>=0&&shuzu[hang-1][lie]==0){
//如果hang - 1 < 0,数组越界,加限制条件
hang--;
}else{
weizhi=1;
lie++;
}
}
}
}
for (int i =0;i<n;i++){
for (int j=0;j<n;j++ ){
if (j==0){
System.out.print(shuzu[i][j]+"\t");
} else {
System.out.print(""+shuzu[i][j]+"\t");
}
}
System.out.println();
}
}
}