一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
码农求职神器Triplebyte:
不用海投,内推多家公司面试
Airbnb 数据科学职位
in analytics and inference
游戏初创公司
招聘工程师、Designer和游戏策划
游戏初创公司DreamCraft招聘工程师、UIUX Designer和游戏策划
电商初创公司Good Days
招聘SDE/UI/TPM实习生
把贵司招聘信息放这里
查看: 334|回复: 2
收起左侧

算法4 week3 slopeOrder函数求助

[复制链接] |试试Instant~ |关注本帖
逻辑学 发表于 2017-7-4 10:08:42 | 显示全部楼层 |阅读模式

[Coursera]Algorithm4 #3 - 2017-07-05@普林斯顿

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
/**
     * Compares two points by the slope they make with this point.
     * The slope is defined as in the slopeTo() method.
     *
     * @return the Comparator that defines this ordering on points
     */
    public Comparator<Point> slopeOrder() {

        return null;
        /* YOUR CODE HERE */
    }
week3里面要完成这个slopeOrder函数,这里面要求比较两个点的斜率,可是并没有传点的参数进来啊,我看了一下网上的代码,是建了一个slopeOrder的子类,在子类里面要求传参数进去,有点看不懂。
    private class SlopeOrder implements Comparator<Point> {
        public int compare(Point q1, Point q2) {
            double d1 = slopeTo(q1);
            double d2 = slopeTo(q2);
            if (d1 == d2) return 0;
            if (d1 < d2) return -1;
            return +1;
        }
    }
public Comparator<Point> slopeOrder() {
        return new SlopeOrder();
    }
调用slopeOrder的时候没有参数传入,那新建的类里面也没有参数,那compare函数是怎么调用的呢?
magicsets 发表于 2017-7-5 04:17:26 | 显示全部楼层
本帖最后由 magicsets 于 2017-7-5 04:26 编辑

这个代码用起来是这样的:
----
Comparator<Point> o = slopeOrder();

Point p1 = /* some point */;
Point p2 = /* some point */;
int value = o.compare(p1, p2);
----

也就是slopeOrder()返回的o是一个“比较器”,本质上是一段“代码”而不是一段“数据”。然后别人再用这段代码去比较两个点。

如果想深入理解的话可以去了解一下“高阶函数”(high-order function),“闭包”(closure)这些概念。
回复 支持 反对

使用道具 举报

ilvfruits 发表于 2017-12-5 12:48:02 | 显示全部楼层
没看懂啊,这段代码应该怎么写?我写的如下没法通过compile,就是说compare(Point p1, Point p2)方法出错,求指教
public Comparator<Point> slopeOrder() {
// compare two points by slopes they make with this point
@Override
public int compare(Point p1, Point p2) {
double slopeP1 = slopeTo(p1);
double slopeP2 = slopeTo(p2);
if (slopeP1 == slopeP2) return 0;
if (slopeP1 < slopeP2) return -1;
else return +1;
}
}

错误是:
Error: Syntax error on token "(", ; expected
Error: Syntax error on token ",", ; expected
Error: Syntax error on token ")", ; expected
回复 支持 反对

使用道具 举报

本版积分规则

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-1-18 18:24

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表