所以我最近在课堂上介绍了Points。现在我试图找到X的差异,然后找出Y的差异然后将它们加在一起。我很迷茫,无法找到正确的答案。有什么选择吗?
只是提醒一下这是使用Point类。
更好的说法我不理解我在AP计算机科学课上教过的Point课程。不是我不明白如何减去x2-x1。我将使用什么命令来完成此操作,因为在输入x2-x1时我仍然会遇到错误。
Heres是我应该做的: “在我们的例子中,曼哈顿距离是坐标差异的绝对值的总和;换句话说,x的差异加上点之间y的差异。” 老师准确的话。
答案 0 :(得分:2)
两个X点的差异?如果是这样,你会做X1-X2 ......和Y点相同...... Y1-Y2。
为确保差异为正,您可以
Math.abs(p.X1-p.X2)
...同样
Math.abs(p.Y1-p.Y2)
然后将它们加在一起......
Math.abs(p.X1-p.X2)+ Math.abs(p.Y1-p.Y2)
在您澄清之后......我已经修改了我的答案
public int manhattanDistance(Point other){ //not sure why return an int...I think returning a double makes more sense..
int xdist = Math.abs(this.x-other.x);
int ydist = Math.abs(this.y-other.y);
return (int)xdist+ydist; //cast to int because you must return int
}
或更少的代码版本......
public int manhattanDistance(Point other){
return (int)Math.abs(this.x-other.x) + Math.abs(this.y-other.y);
}
答案 1 :(得分:1)
两点之间的距离(直线)可以计算为:
___________________________
/ 2 2
/ (p2x - p1x) + (p2y - p1y)
v
例如,经典的3-4-5三角形:
4
+---*
| /
3 | / 5
|/
*
斜边(5)可以计算为3 * 3 + 4 * 4
的平方根。
使用Java中的两个Point对象的一种方法是:
dist = (point2.x - point1.x) * (point2.x - point1.x)
+ (point2.y - point1.y) * (point2.y - point1.y);
虽然您也可以使用Math.pow(something,2)
代替乘法。
另一方面,如果你想找到曼哈顿距离(现在通过添加到问题中的额外信息看起来很明显),你可以使用类似的东西:
mdist = Math.abs (point2.x - point1.x) + Math.abs (point2.y - point1.y);
这可以解决X差异(可能是负数),然后取绝对值以强制它为正。然后它对Y差异做同样的事情并将它们加在一起。