A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 游呤人 中级黑马   /  2015-7-11 14:25  /  342 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package holle;

import java.util.ArrayList;

/*
*
*
* 1     2    3    4  5
* 16 17 18 19 6
        15 24 25 20 7
        14 23 22 21 8
        13 12 11 10 9
* 思路:
*                 这个矩阵,可以理解成,不撞南墙不调头,一直走到一条死胡同里,
*
*   定义一个二维数组记录每次行走的过程,而每次转弯之后都在同行或同列进行
*   ,走过的地方不能在走,直到它上不能走下不能走,左不能走,右不能走。
*   即正好填满整个二维数组。
*   我的
*           for(;i<arr.length-1;i++){
                                if(arr[j][i+1]!=0){
                                        break;
                                }       
                                arr[j][i]=count;
                                        count++;
                        }
                 我没定义i,j的初始化值定义在了外层大循环的上面
                ,这是因为,我们的i,或者是J将会是我下次的变量,
                        或者递增
                                                    0 1 2 3 4
                                                   --------------
                                                     1 2 3 4 5   |  0
                                                                    6  |  1
                                                                     7  |  2
                                                                     8  |  3
                                                                     9  |  4
                         所以我不希望下一次循环开始时的值发生改变,而是将每一次循环的结果与下一次共享                                                                                                       
*   
*   这是我们从里层四个小循环的思路。
*   
*   
*   我们知道一个这个数组是递增,每次的增涨值是一,
*   而这个数组正好是N×N的方形矩阵,最大
*   值就是N×N  那么这就是我们的大循环的边界。
*
*
*
*      
*    我们可以理解成 行号不变长值是
*   
* 从左至右
*                   行号不变 列号自减
*  从上倒下   号不变
* */
@SuppressWarnings("all")
public class Day_04_5 {
        public static void main(String[] args) {
                        int[][] arr=new int[10][10];
                        int i=0;  //列号,控制
                        int j=0;//行号,控制
                        int count=1;
        while(count<arr.length*arr.length){
                        //右 控制j不变 i自增
                        for(;i<arr.length-1;i++){
                                if(arr[j][i+1]!=0){
                                        break;
                                }       
                                arr[j][i]=count;
                                        count++;
                        }
                        //下  控制i不变 J自增
                        for(;j<arr[i].length-1;j++){
                                if(arr[j+1][i]!=0){
                                        break;
                                }       
                                arr[j][i]=count;       
                                count++;
                }
                        //左 控制j不变 i自减
                        for(;i>0;i--){
                                if(arr[j][i-1]!=0){
                                        break;
                                }
                                arr[j][i]=count;
                                count++;
                        }
                        //上  控制i不变 j自减
                        for(;j>0;j--){
                                if(arr[j-1][i]!=0){
                                        break;
                                }
                                arr[j][i]=count;       
                                count++;
                }
                        arr[j][i]=count;       
                        //count++;
        }
                        for(int x=0;x<arr.length;x++){
                                for (int k = 0; k < arr[x].length; k++) {
                                        System.out.print(arr[x][k]+"\t");
                                }
                                System.out.println();
                               
                        }
                }
}


评分

参与人数 1黑马币 +1 收起 理由
18671183990 + 1

查看全部评分

3 个回复

倒序浏览
哈哈,我的第一个贴子
回复 使用道具 举报
过来学习了,自己弄了好久都没有思路,学习下,感谢楼主分享。
回复 使用道具 举报
我刚学习JAVA,对这道题现在还是没有思路。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马