V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pinews
V2EX  ›  程序员

刚开始学对象编程,不知道怎么写,大家帮帮忙

  •  
  •   pinews · 2019-05-05 08:31:40 +08:00 · 5029 次点击
    这是一个创建于 2018 天前的主题,其中的信息可能已经有所发展或是发生改变。
    思路如下,
    有一对对象
    有男一人,女一人,
    男提出约会,女同意约会
    约会进行
    约会结束
    男金钱减 300,双方亲密度减 300

    怎么写啊,完全没头绪,苦恼
    第 1 条附言  ·  2019-05-05 09:43:03 +08:00
    不是题不是钓鱼,想写个相亲网站,不用太具体的代码,就是大致思路。不知道改用程序怎么写。
    47 条回复    2019-05-06 09:42:55 +08:00
    kljsandjb
        1
    kljsandjb  
       2019-05-05 08:33:16 +08:00 via Android
    牛逼的题
    18k
        2
    18k  
       2019-05-05 08:34:35 +08:00 via iPhone
    面相对象的编程
    这里很多人是没有经验的
    lhx2008
        3
    lhx2008  
       2019-05-05 08:38:16 +08:00 via Android
    亲密度肯定要存到另外一个对象,要我做的话这是个二层 map ( table )。
    如果是一女不事二夫的话,同时加到男女的对象上也没问题。
    pinews
        4
    pinews  
    OP
       2019-05-05 08:40:18 +08:00
    @lhx2008 是这样的 假设 5 男 5 女,可以互相约会。
    FelixZeng
        5
    FelixZeng  
       2019-05-05 08:40:39 +08:00
    建议你先找个对象,面向对象编程可能会好一点
    salamanderMH
        6
    salamanderMH  
       2019-05-05 08:42:08 +08:00 via Android
    女方觉得不合适就算了
    pinews
        7
    pinews  
    OP
       2019-05-05 08:42:52 +08:00
    @FelixZeng 正在做相亲网站
    lhx2008
        8
    lhx2008  
       2019-05-05 08:43:25 +08:00 via Android
    @pinews Map<Person, Map<Person, Integer>>
    pinews
        9
    pinews  
    OP
       2019-05-05 08:45:11 +08:00
    @lhx2008 不太懂,如何存入数据库我还是知道的
    Bigglesworth
        10
    Bigglesworth  
       2019-05-05 08:48:11 +08:00
    怎么“男金钱减 300,双方亲密度减 300 ”,这不就是黄了嘛,哈哈哈。。。
    cmqwan
        11
    cmqwan  
       2019-05-05 08:58:24 +08:00
    @Bigglesworth 亲密度的初始值设定可以根据男方的资产而定,比如有一个亿,init 的时候,双方亲密度就是一百万。减个 300,毛毛雨
    crazytree
        12
    crazytree  
       2019-05-05 09:01:47 +08:00
    先 new 一个对象
    Bigglesworth
        13
    Bigglesworth  
       2019-05-05 09:20:11 +08:00
    @cmqwan #11 不是那个初始值问题,我说男方约会花了 300,亲密度反而减 300 了。
    nutting
        14
    nutting  
       2019-05-05 09:20:57 +08:00
    这个亲密度到底怎么定义的,先让你产品经理说清楚吧。别的没什么难度吧
    gransh
        15
    gransh  
       2019-05-05 09:27:43 +08:00
    楼主是做作业还是钓鱼?
    BingoXuan
        16
    BingoXuan  
       2019-05-05 09:29:16 +08:00
    如果是 python 的话,可以用上下文管理器。那么约会开始和结束的操作就可以写进__enter__,__exit__两个魔法方法里面。
    ben = male()
    lily = female()
    with date(ben, lily) as d:
    ####d.set_fee(300)
    ####d.set_favorablity(300)
    ####d.fail()
    aa514758835
        17
    aa514758835  
       2019-05-05 09:32:29 +08:00
    金钱减完亲密度应该增加啊,怎么会搞得亲密度下降,应该是个 bug
    ben1024
        18
    ben1024  
       2019-05-05 09:36:40 +08:00
    先找个对象?
    SuperMild
        19
    SuperMild  
       2019-05-05 10:12:47 +08:00   ❤️ 1
    这是一个 Date 对象,它初始化时接受一个 Man 和一个 Girl 的实例,它有一个 run 方法,执行 run 方法表示 man 向 girl 发起约会。

    class Date(Man, Girl) {

    fn run() {

    if woman.accepted {

    money = man.pay() // default = 300, man.money -= 300
    successful = girl.get(money)
    love = successful ? money : -money
    man.love(girl) += money
    girl.love(man) += money

    }

    }

    }

    另外你还需要 Man 和 Girl 对象,他们有如上所示的方法,你可以自己实现其具体内容。
    NMmmm
        20
    NMmmm  
       2019-05-05 10:15:04 +08:00
    自己约自己出去玩,
    SuperMild
        21
    SuperMild  
       2019-05-05 10:15:10 +08:00
    逻辑上有一些 bug,但大概思路就是这样。
    zhaishunqi
        22
    zhaishunqi  
       2019-05-05 10:15:16 +08:00
    我只想知道分手是不是减 600....
    python30
        23
    python30  
       2019-05-05 10:20:13 +08:00
    这是相亲游戏环节?
    zy445566
        24
    zy445566  
       2019-05-05 10:27:28 +08:00   ❤️ 1
    es6 写的,java 照搬就是

    class Proson {
    constructor(name, money) {
    this.name = name;
    this.money = money;
    this.love_level = 0;
    console.log(`${this.name} 有 ${this.money} 的钱, 有 ${this.love_level} 的好感度`);
    }

    costLove(love_level) {
    this.love_level-=love_level;
    console.log(`${this.name} 降低了 ${love_level} 的好感度,现在还有 ${this.love_level} 的好感度`);
    }
    }

    class Meet {
    constructor(sender) {
    this.sender = sender;
    this.agreer = null;
    this.startTime = null;
    this.endTime = null;
    console.log(`${this.sender.name} 发起了约会`);
    }
    agree(agreer) {
    this.agreer = agreer;
    console.log(`${this.agreer.name} 接受了约会`);
    }

    start () {
    if(this.agreer !== null) {
    console.log(`约会开始了`);
    this.startTime = new Date();
    } else {
    console.log(`约会还未被接受`);
    }
    }

    end () {
    if(this.startTime !== null) {
    console.log(`约会结束了`);
    this.sender.costMoney(300);
    this.sender.costLove(300);
    this.agreer.costLove(300);
    } else {
    console.log(`约会还未开始`);
    }
    }
    }

    class Man extends Proson {
    constructor(name, money) {
    super(name, money);
    }
    sendMeet() {
    return new Meet(this);
    }
    costMoney (money) {
    this.money-=money;
    console.log(`${this.name} 花费 ${money} 的钱,现在有 ${this.money} 的钱`);
    }
    }

    class Woman extends Proson {
    constructor(name, money) {
    super(name, money);
    }

    agreeMeet(meet) {
    meet.agree(this);
    }
    }

    let tom = new Man('Tom',300);
    let jan = new Woman('Jan',0);
    let meet = tom.sendMeet();
    jan.agreeMeet(meet);
    meet.start();
    meet.end();
    zy445566
        25
    zy445566  
       2019-05-05 10:28:41 +08:00
    可以直接在谷歌浏览器打开控制台运行
    cmqwan
        26
    cmqwan  
       2019-05-05 10:36:28 +08:00 via iPhone
    @Bigglesworth 正常,约会途中发生了一些不愉快的事情,聊天的时候哪句话说错了之类的
    pinews
        27
    pinews  
    OP
       2019-05-05 10:48:21 +08:00
    @SuperMild 谢谢 学习一下
    @python30 是的,自己想出来一个相亲小游戏的实例,来学习面对对象编程。
    pinews
        28
    pinews  
    OP
       2019-05-05 10:51:54 +08:00
    @zy445566 太感谢了 正是我想要的
    pinews
        29
    pinews  
    OP
       2019-05-05 10:54:45 +08:00
    @zy445566 虽然还有好多地方看不懂我慢慢消化一下
    fvckDaybyte2
        30
    fvckDaybyte2  
       2019-05-05 11:25:17 +08:00 via iPhone   ❤️ 2
    如果男方金钱减 600,女方金钱加 400,亲密度不变,是不是可以报警了
    arthasliu
        31
    arthasliu  
       2019-05-05 11:28:24 +08:00
    @fvckDaybyte2 还有中间商赚差价吗。。
    Isight
        32
    Isight  
       2019-05-05 11:28:47 +08:00
    约会进行的详细流程与金钱减 300 的关系说清楚,然尝试把金钱加个 0,尝试一下
    fvckDaybyte2
        33
    fvckDaybyte2  
       2019-05-05 11:35:07 +08:00 via iPhone
    @arthasliu 房费不要钱么……
    senni
        34
    senni  
       2019-05-05 12:20:27 +08:00 via Android
    为什么要学编程
    可以 new 一个对象
    zgl263885
        35
    zgl263885  
       2019-05-05 12:29:38 +08:00 via iPhone
    简单分析下业务,大概应该有一个基类,人,拥有一些基本的属性和方法,如属性姓名,出生日期,性别,财富,当前对象(们,劈腿情景);方法有约会(参数为人基类,不能排除同性约会),吃饭方法,说话方法,等等。有了基类后,要派生两个子类,男人,女人,定义一些各自特征属性和特有方法,如女人会有大姨妈,而男人没有,男女上厕所方式不同等。针对某些属性和方法,需要使用 public,protect 等关键字尽心访问限制。
    根据业务需求,不断完善基类和子类模型。
    当一个人约会另一个人时候,可以这样调用了:张三.约会(李四,明晚,某某地点,300 元)。
    zgl263885
        36
    zgl263885  
       2019-05-05 12:31:17 +08:00 via iPhone
    约会过程中需要触发哪些事件或方法,再定义和调用一下就好了。
    vtoexshan
        37
    vtoexshan  
       2019-05-05 12:40:14 +08:00
    先找个对象,然后学习起来更容易
    shm7
        38
    shm7  
       2019-05-05 12:47:58 +08:00 via iPhone
    男方金额-1000w$,女方好感度提升+100%
    zdnyp
        39
    zdnyp  
       2019-05-05 13:52:37 +08:00
    @fvckDaybyte2 我怀疑你在开车,但是我又没有证据
    huage2580
        40
    huage2580  
       2019-05-05 14:45:47 +08:00
    嗯,是这样的,这是数据库设计范畴(滑稽
    huage2580
        41
    huage2580  
       2019-05-05 14:51:54 +08:00
    会员表,约会记录表,亲密度表,交易记录表,亲密度记录表。大概是这样的
    c4f36e5766583218
        42
    c4f36e5766583218  
       2019-05-05 15:02:34 +08:00
    男金钱减 300,双方亲密度减 300 //???what,为啥亲密度-300,失败的约会 233
    win7pro
        43
    win7pro  
       2019-05-05 15:29:16 +08:00
    你需要一个程序员加盟,而你自己当产品就好
    houzhimeng
        44
    houzhimeng  
       2019-05-05 15:30:30 +08:00
    参考心跳回忆,或者银他妈中的某一集
    jinhan13789991
        45
    jinhan13789991  
       2019-05-05 18:39:09 +08:00
    有一对对象
    有男一人,女一人,
    男提出约会,女同意约会
    约会进行
    约会结束

    此时请参考 TCP 三次握手
    jinhan13789991
        46
    jinhan13789991  
       2019-05-05 18:40:25 +08:00
    @jinhan13789991 逻辑有漏洞,女方同意约会,男方怎么知道女方同意了呢,女方怎么知道男方知道她同意了呢。
    cocosgames
        47
    cocosgames  
       2019-05-06 09:42:55 +08:00 via Android
    先 new 出来一个对象再说
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1141 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 22:54 · PVG 06:54 · LAX 14:54 · JFK 17:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.