日期:2014-05-20  浏览次数:20839 次

求解释二维数组
正在自学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();
        }
    }
}