正在自学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(); } }}