2011-04-15 49 views
0

我正在嘗試編寫一個比較方法來執行此操作。如何根據對象在一條線上的位置來比較對象

// 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 

我硝基甲苯真的知道如何做到這一點,通常我只是比較,如果A> B +回報已經int和-ve INT如果小於或0相等。

我從您的建議解決方案.........

我用思想形成吉姆Blackler,拉爾夫和彼得Lawrey以及與此走了過來。它的工作原理對不起,我有點糊塗了,沒想到笛卡爾cordinates感謝Aasmund Eldhuset的,這是我最後的比較方法..它的工作原理

類辭書實現比較{// 這需要如此改寫。 ..
//如果a和b位於同一水平線上, //然後< b當a是b的左側 //否則,< b當a是下文b
公衆詮釋比較(點a,點b) 如果(ay == by)// y軸相同(相同線) if(ax < b.x)//在b的左邊(在x軸上) return -1; 別的 返回1; //至b 右邊} 否則如果(a.y < b.y)// Y軸是不一樣的(未同線以下) { 返回-1;

} 
    else 
     return 0; 
} 

}

+3

的什麼線?你如何存儲一個對象所在的行?事先不知道,我們如何回答? – Jack 2011-04-15 14:18:45

+0

你是什麼意思的「在同一行」是他們在一個數組?是否是這些對象的成員? – MByD 2011-04-15 14:19:24

回答

0

你需要不管是什麼類型的A和B類屬性是可以的compareTo。一旦你開始更具體地思考,這很容易。

a和b有哪些類型?

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

從文本,這聽起來像ab是笛卡爾座標(每個都具有Xÿ值)。你有一個代表座標的類嗎?如果不是,則應該製作一個,比較方法應該使用該類的兩個實例,並且您可以使用它們的值和它們的值來確定它們是否在同一水平線上,或者哪一個是另一個的左邊。在Java中實現一個比較方法

0

一種方法是Comparable Interface

它只有一個方法int compareTo(T o)。此方法將此對象(方法被調用的對象)與指定的對象(b)進行比較。返回負整數,零或正整數,因爲此對象小於,等於或大於指定的對象。

假設對象是僞類(,因爲它只是僞代碼),那麼比較方法應該看起來像這樣。

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; 
     } 
     } 
    } 
} 
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; 
    } 
}