Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取两个位置之间的路径_Java_Arrays_Multidimensional Array - Fatal编程技术网

Java 获取两个位置之间的路径

Java 获取两个位置之间的路径,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,给定一个职位: 类位置{ 私有整数x,y; 公共位置(整数x,整数y){ 这个.x=x; 这个。y=y; } 我想计算两个这样的位置之间的差异,然后让它返回一个位置列表,以结束它 例如: Position oldPosition = new Position(10, 10); Position newPosition = new Position(12, 10); 应返回包含以下内容的列表: [[10,10], [11,10], [12,10]] 我当前的代码: 位置oldPosition

给定一个职位:

类位置{
私有整数x,y;
公共位置(整数x,整数y){
这个.x=x;
这个。y=y;
}
我想计算两个这样的位置之间的差异,然后让它返回一个位置列表,以结束它

例如:

Position oldPosition = new Position(10, 10);
Position newPosition = new Position(12, 10);
应返回包含以下内容的列表:

[[10,10], [11,10], [12,10]]
我当前的代码:

位置oldPosition=新位置(10,10);
位置newPosition=新位置(12,12);
List fromOldToNewPositions=new ArrayList();
int differenceX=newPosition.getX()-oldPosition.getX();
int differenceY=newPosition.getY()-oldPosition.getY();
布尔X负=差X<0;
布尔负=差<0;

对于(int x=oldPosition.getX();xNegative&&x>=newPosition.getX()| | |!xNegative&&x=newPosition.getY())| | |!y负&&y如果只允许左、右、上和下移动,则需要先执行
X
方向上的所有步骤,然后执行
y
方向上的所有步骤。这意味着两个for循环彼此之后,而不是嵌套

如果允许使用对角步数(看起来),则需要计算通常需要执行的步数:
max(diffX,diffY)
。然后执行尽可能多的步数,其中一些是对角步数:

位置oldPosition=新位置(10,10);
位置newPosition=新位置(14,12);
List fromOldToNewPositions=new ArrayList();
int differenceX=newPosition.getX()-oldPosition.getX();
int differenceY=newPosition.getY()-oldPosition.getY();
int steps=Math.max(差分x,差分y);

对于(int step=0;step要获取路径,请尝试以下操作:

位置oldPosition=新位置(15,10);
位置newPosition=新位置(12,11);
List fromOldToNewPositions=new ArrayList();
如果(oldPosition.x>newPosition.x){
位置c=旧位置;
oldPosition=newPosition;
newPosition=c;
}
int x=oldPosition.x;
int y=oldPosition.y;
fromOldToNewPositions.add(oldPosition);
对于(;x newPosition.y){
添加(新位置(x+1,--y));
}否则{
添加(新位置(x+1,y));
}
}
}
fromtooldtonewpositions.forEach(e->System.out.println(e.x+“”+e.y));
int-xChange=newPosition.getX()-oldPosition.getX();
int-yChange=newPosition.getY()-oldPosition.getY();
int xPositive=1;//x的每一步
int yPositive=1;//y的每一步
如果(交换<0){
xPositive=-1;
}
if(yChange<0){
yPositive=-1;
}
intx=oldPosition.getX();
int y=oldPosition.getY();
fromOldToNewPositions.add(oldPosition);
while(xChange!=0 | | yChange!=0){
//x仅在当前位置与目标位置不相同时更改
如果(xChange!=0){
x+=x正;
xChange-=xPositive;
}
如果(yChange!=0){
y+=y正;
yChange-=yPositive;
}
添加(新位置(x,y));
}

这真是太神奇了!在
Math.max(…)
函数中调用
Math.abs(…)
允许它也可以处理负数。非常感谢!@Jazerix啊,是的,有道理,我忘了那个案例
[[10,10], [10,11], [10,12], [11,10], [11,11], [11,12], [12,10], [12,11], [12,12]]
[[10,10], [11,11], [12,12]]
[[10 | 10], [11 | 10], [12 | 11], [13 | 11], [14 | 12]]