//第一个帖子:http://bbs.itheima.com/thread-192515-1-1.html
//第二个帖子:http://bbs.itheima.com/thread-192519-1-1.html
//今天学了面向对象,想把我的思路用面向对象表达出来,不知道有没有准确
//只写了Road类,>_<
//希望有面向对象的大牛指导我下
/**实现螺旋矩阵--------实现过程
*思路:1.将螺旋矩阵分成了4种情况 首先是往右走,然后是往下走,然后是往左走,然后是往上走,然后再往右走。。。。。
* 2.往右走:首先往右走,如果发现右边这样走是错的【超出数组界限或者右边已经有数了】,就退回,走对了就标记下【给标记数组赋值,同时记录坐标】
* 然后要往下走,如果发现下边是不可以走的【超出数组界限或者下边已经有数了】,就不走了
* 3.往下走:首先往下走,如果发现下边这样走是错的【超出数组界限或者下边已经有数了】,就退回,走对了就标记下【给标记数组赋值,同时记录坐标】
* 然后要往左走,如果发现左边是不可以走的【超出数组界限或者左边已经有数了】,就不走了
* 4.往左走:首先往左走,如果发现左边这样走是错的【超出数组界限或者左边已经有数了】,就退回,走对了就标记下【给标记数组赋值,同时记录坐标】
* 然后要往上走,如果发现上边是不可以走的【超出数组界限或者上边已经有数了】,就不走了
* 5.往上走:首先往上走,如果发现上边这样走是错的【超出数组界限或者上边已经有数了】,就退回,走对了就标记下【给标记数组赋值,同时记录坐标】
* 然后要往右走,如果发现右边是不可以走的【超出数组界限或者右边已经有数了】,就不走了
*面向对象的思考: 对象有谁?走的人,路
* 人 Person 类:
成员变量:private int x;private int y;//所在的坐标
* 成员方法:走路 boolean run(Road road)//road 是路的实例 走成功返回true ,否则返回 false
* 做标记 boolean setSign(Road road)//给路做标记 成功返回true 失败返回false
路 Road 类 :
成员变量:private int [][] road;//未做标记的路 默认没走过【0表示未走过】
private int length;//路的长度
private int wide;//路的宽度
构造方法:Road(int length,int wide) {
this.length=length;
this.wide=wide;
road=new int[length][wide];
}
成员方法:public boolean isRunding(int x,int y){}//该路是否有做标记,可以走返回true ,不可以走返回flase
public void show()//展示路的所有坐标
再定义一个螺旋矩阵的规则类 :ScrewMatrixRegular
private int direction;//默认走的方向为右 【定义枚举类型更合适,可惜我枚举还没去学】
0-右 1下 2左 3 上
private int key;//螺旋矩阵该有的值
成员方法: public boolean isRight(Road road,Person person) //是否可以往右走
public boolean isLeft(Road road,Person person)//是否可以往左走
public boolean isUpper(Road road,Person person) //是否可以往上走
public boolean isBelow(Road road,Person person)//是否可以往下走
public boolean toRight(Road road,Person person) //key++ 往右走的实现,走失败则返回flase,成功返回true
public boolean toBelow(Road road,Person person)//key++ 往下走的实现,走失败返回flase,成功返回true
public boolean toLeft(Road road,Person person)//key++ 往左走的实现,走失败返回flase,成功返回true
public boolean toUpper(Road road,Person person) //key++ 往上走的实现,走失败返回flase,成功返回true
public void changeDirection()//改变方向的规则
定义逻辑实现类: ScrewMatrixRealize
public void show(Person person,Road road)//显示螺旋矩阵
*/
/**
* 路 Road 类 :
* 成员变量:private int [][] road;//未做标记的路 默认没走过【0表示未走过】
* private int length;//路的长度
* private int wide;//路的宽度
* 构造方法:Road(int length,int wide) {
* this.length=length;
* this.wide=wide;
* road=new int[length][wide];
* }
*
* 成员方法:public boolean isRunding(int x,int y){}//该路是否有做标记,可以走返回true ,不可以走返回flase
*
* public void show()//展示路的所有坐标
*/
class Road {
/**
*未做标记的路 默认没走过【0表示未走过】
*/
int [][]road;
/**
*路的长度 x
*/
private int length;
/**
*获取length
*/
public int getLength() {
return this.length;
}
/**
*路的宽度 y
*/
private int wide;
/**
*获取wide
*/
public int getWide() {
return wide;
}
/**
*构造函数
*/
public Road(int length,int wide) {
this.length=length;
this.wide=wide;
road=new int[length][wide];
}
/**
*该路是否有做标记,可以走返回true ,不可以走返回flase
*@param x 路的x坐标
*@param y 路的y坐标
*/
public boolean isRunding(int x,int y) {
if(x<this.length&&y<this.wide) {
if(road[x][y]!=0) return true;
} else System.out.println("该路不存在("+x+","+y+")坐标!");
return false;
}
/**
*展示路的所有坐标
*/
public void show() {
for(int y=0;y<this.wide;y++) {
for(int x=0;x<this.length;x++)
System.out.println(road[x][y]+"\t");
System.out.println();
}
}
}
|