当前位置: 代码迷 >> J2SE >> 求解释二维数组,该怎么解决
  详细解决方案

求解释二维数组,该怎么解决

热度:9   发布时间:2016-04-24 01:06:07.0
求解释二维数组
正在自学java二维数组,求解二维数组运行方式,希望大牛给代码写个注释。。。

Java code
/* * 在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();        }    }}


------解决方案--------------------
代码最好自己看,写出实现思路。比如说输入3
数组将初始化为
000
000
000
位置为1,就是像右移动
100
000
000
->
123 到达末尾,将位置设置-2向下移动
000
000
->
123
004
005 到达末尾,向左移动
->
123
004
765 到达末尾,向上移动
->
123
804 通过上面的位置不为0,判断到达末尾(然后再加上面的通过数组的边界确定) 所有if中有两个判断
765
->
123
894
765


PS:通过debug方式运行观察,也可知运行方式。
Java code
int lie = 0 ;   //初始化列数
------解决方案--------------------
Java code
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();        }    }}
  相关解决方案