我有这两个实例变量,它们在对象的构造函数中设置为:
(int)(Math.random()*100);
这两个实例变量是:
private double xPos;
private double yPos;
该类称为士兵,我还有其他三个继承自士兵的类(目前仅是构造函数)
我现在得到的输出是:
我的名字是:骑士我的位置:(45.0,56.0)
我的名字是:Crossbowman我现在的位置:(15.0,91.0)
我的名字是:Halberdier我现在的位置:(67.0,8.0)
我正在尝试计算对象在x和y位置的距离
我目前正在尝试的方法是:
protected Soldier distanceBetween(Soldier x, Soldier y){
double distBetween = (x.xPos - y.xPos)+(x.yPos-y.yPos);
return this;
}
我尝试实现的方法是将两个继承自Soldier的对象放入distBetween参数中,
例如,我使用以下名称:
戟兵
骑士和
弩手。
当我调用此方法时:
cavalier.distanceBetween(cavalier,crossbowman);
我希望它计算x和y坐标之间的距离
我将如何实现?
最佳答案
完全错误。
您需要返回值,而不是士兵。
这是更一般的:
public static double distanceBetween(double x1, double y1, double x2, double y2) {
double dx = Math.abs(x2-x1);
double dy = Math.abs(y2-y1);
if (dx > dy) {
double r = dy/dx;
return dx*Math.sqrt(1.0 + r*r);
} else {
double r = dx/dy;
return dy*Math.sqrt(1.0 + r*r);
}
}
^
运算符不取幂;是XOR。您可以通过以下方式覆盖此方法:
public static double distanceBetween(Soldier s1, Solder s2) {
return distanceBetween(s1.xPos, s1.yPos, s2.xPos, s2.yPos);
}
由于您遇到了麻烦,我将为您说明:
/**
* Distance calc
* User: mduffy
* Date: 11/1/2015
* Time: 9:58 AM
* @link http://stackoverflow.com/questions/33462961/trying-to-calculate-the-distance-between-the-position-of-two-objects/33463222?noredirect=1#comment54712511_33463222
*/
public class Soldier {
public final double xPos;
public final double yPos;
public static void main(String[] args) {
Soldier s = new Soldier(0, 0);
Cavalier c = new Cavalier(3, 4);
System.out.println(String.format("distance: %f10.3", s.distanceBetween(c)));
}
public Soldier(double xPos, double yPos) {
this.xPos = xPos;
this.yPos = yPos;
}
public double distanceBetween(Soldier s) {
return distanceBetween(this.xPos, this.yPos, s.xPos, s.yPos);
}
public static double distanceBetween(double x1, double y1, double x2, double y2) {
double dx = Math.abs(x2-x1);
double dy = Math.abs(y2-y1);
if (dx > dy) {
double r = dy/dx;
return dx*Math.sqrt(1.0 + r*r);
} else {
double r = dx/dy;
return dy*Math.sqrt(1.0 + r*r);
}
}
public static double distanceBetween(Soldier s1, Soldier s2) {
return distanceBetween(s1.xPos, s1.yPos, s2.xPos, s2.yPos);
}
}
class Cavalier extends Soldier {
public Cavalier(double x, double y) {
super(x, y);
}
}
如果您想要不同的距离计算方法(例如,欧几里得,曼哈顿,皮尔逊,球面等),则可以使用一个接口,通过添加新的实现来更改它:
public interface DistanceCalculator {
double distance(double x1, double y1, double x2, double y2);
}
现在,您可以通过添加新代码而不是修改现有代码来轻松切换。
关于java - 试图计算两个物体之间的距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33462961/