在构建一个equals方法时遇到一些麻烦,该方法根据包含零点(0,0) - 方程的距离来比较列表中的二维坐标点。
public double distanceToOrigin() {
return distance(zero);
}
public double distance(Point that) {
return Math.sqrt(Math.pow((x - that.getX()), 2) + Math.pow((y - that.getY()), 2));
}
boolean equals(List<Point> lst){
boolean eq = true;
for (int i=0; i<lst.size(); i++)//accounts for first element-to-compare.
{
for (int q = 1; q < lst.size(); q++)//accounts for second element-to-compare.
{
if(lst.distanceToOrigin(i) == (lst).distanceToOrigin(q)))
{
eq = false;
}
}
}
return eq;
}
我可能过度解释if语句:是否有更有效的方法来比较两个元素(在一行代码中)?
供参考:
static Point zero = new Point(0, 0);
public int getX(){
return x;
}
public int getY(){
return y;
}
衷心感谢。
答案 0 :(得分:0)
列表示例:
List<Point> lst = new ArrayList<Point>();
更正的等于方法看起来类似于以下(当前有点笨拙的实施):
boolean equals(List<Point> lst){
boolean eq = true;
for (int i=0; i<lst.size(); i++)//accounts for first element-to-compare.
{
for (int q = 1; q < lst.size(); q++)//accounts for second element-to-compare.
{
if(lst.get(i).distanceToOrigin() == lst.get(q).distanceToOrigin()){
eq = false;
}
}
}
return eq;
}
equals方法应该根据element-to-compare(1)是否与element-to-compare(2)相同来返回boolean true或false。
答案 1 :(得分:-1)
如果你正在寻找两个点的相等距离,你可能最好只比较坐标的平方和。这避免了比较浮点数并且效率更高:
class Point {
public boolean isSameDistanceFromOrigin(Point other) {
return x * x + y * y == other.x * other.x + other.y * other.y;
}
}
如果我正确地解释你的循环,你想要返回false,如果列表中的任何两个点与原点的距离相同。这是使用Java 8在一行(某种程度)中执行此操作的算法:
public boolean areAllDifferentDistancesFromOrigin(List<Point> points) {
return points.stream().noneMatch(point ->
points.stream().filter(p -> p != point)
.anyMatch(p-> point.isSameDistanceFromOrigin(p)));
}