我正在尝试编写一个比较方法来执行此操作。
// 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;
}
答案 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)
从文字中可以看出a
和b
是笛卡尔坐标(每个坐标都有 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;
}
}
}
}