如何根据对象在一条线上的位置来比较对象

时间:2011-04-15 14:16:08

标签: java

我正在尝试编写一个比较方法来执行此操作。

// If a and b lie on the same horizontal line, 
//    then a < b when a is to the left of b
// Otherwise, a < b when a is below b   

我真的知道如何做到这一点,通常我只是比较一个&gt; b返回+ ve int和-ve int如果小于或0等于。

我的建议解决方案.........

我使用了Jim Blackler,Ralph和Peter Lawrey的想法并提出了这个想法。它很有意思我有点困惑,并没有想到笛卡尔坐标感谢Aasmund Eldhuset,这是我最后的比较方法..它的工作原理

class Lexicographical implements Comparator {     //这需要重写,以便...     //如果a和b位于同一水平线上,     //然后是&lt; b当a位于b的左侧时     //否则,a&lt; b当a低于b
时     public int compare(点a,点b)     {         if(a.y == b.y)// y轴是相同的(同一行)         {               if(a.x

    }
    else 
        return 0;
}

}

5 个答案:

答案 0 :(得分:1)

你的意思是

class Point implements Comparable<Point> {
  double x,y;

  public int compareTo(Point b) {
      // If a and b lie on the same horizontal line, 
      if (y == b.y)
      //    then a < b when a is to the left of b
          return x < b.x ? -1 : x > b.x ? +1 : 0;
      // Otherwise, a < b when a is below b
      return y < b.y ? -1 : y > b.y ? +1 : 0;
  }
}

答案 1 :(得分:0)

对于你可以比较的任何类型a和b,你需要一个class属性。一旦你开始更具体地思考,这很容易。

a和b有哪些类型?

答案 2 :(得分:0)

if (a.y == b.y) {
  return a.x < b.x;
} else {
  return a.y < b.y;
}

答案 3 :(得分:0)

从文字中可以看出ab是笛卡尔坐标(每个坐标都有 x y 值)。你有一个代表坐标的班级吗?如果没有,你应该创建一个,compare方法应该使用该类的两个实例,并且你可以使用它们的 x y 值来确定它们是否在相同的水平线,或者哪一个在另一个的左边。

答案 4 :(得分:0)

在java中实现compare方法的一种方法是Comparable Interface

它只有一种方法int compareTo(T o)。此方法将此对象(调用方法的对象)与指定对象( b )进行比较。返回负整数,零或正整数,因为此对象小于,等于或大于指定对象。

假设对象是Pseudo类(因为它只是伪代码),那么compare方法应该是这样的。

class Pseudo implements Comparable<Pseudo> {

   @Override
   int compareTo(Pseudo b) {

     if (this and b lie on the same horizontal line) {
        if (this is to the left of b) {
           return -1;
        } else {
          return 1;
        }
      } else {
         if (this is to the below of b) {
           return -1;
         } else {
            return 1;
         }
      }
   }
}