5行执行了多年仍未得出结果的代码仔细分析了下这5行,貌似时间复杂度,空间复杂度都不大,为嘛就是执行效率这么低?for(Girl girl = Girls.first(); !myGirlFriend.like(me); girl = Girls.next()){
  if(!girl.hasBoyFriend(now) && i.like(girl)){
  GirlFriend myGirlFriend = (GirlFriend)girl;
  }
}
 

解决方案 »

  1.   

    参数me问题严重,可能主要是属性money取值太小,另外house、car等关键属性为null,导致匹配成功度太低。
      

  2.   

    getMoney()
    getHouse()
    Exception in thread "main" java.lang.NullPointerException以上2个方法报错,然后还有其他未知异常
      

  3.   


    还有的话,就是getFather()这个权限过低。
      

  4.   

    主要是if的条件太高了。如果改成
     if(!girl.hasBoyFriend(now) && isGirl(girl)){
      GirlFriend myGirlFriend = (GirlFriend)girl;
      }
    就可以了。。表示这样就OK了
      

  5.   

    也许还有一个原因
    return getMasterJob();
    结果为:程序员 as 民工
      

  6.   

    其实都错了
    for (Girl girl = Girls.first(); !myGirlFriend.like(me); girl = Girls.next()) {
    if (i.like(girl)) {
    if (!girl.hasBoyFriend(now)) {
    GirlFriend myGirlFriend = (GirlFriend) girl;
    } else {
    GirlFriend myGirlFriend = waqiangjiao(girl);
    }
    }
    }
    private girl wagiangjiao(Girl girl){
    if(getMoney()>X000000&&getHouse()>1&&getFather().equals("李XX")){
    return  girl;
    }
    return null;
      

  7.   

    强制转型力度不够,要从girl转型到woman
      

  8.   

    明显堆栈问题 堆里的内容不够多,所以在栈里没有特定的引用来指向
    造 成了NullPointerException
      

  9.   

    何必那样哩"!myGirlFriend.like(me)"..........要求高了点,只要myGirlFriend.notHate(me)&&you.like(she)就可以了吧............这年头两情相悦的少之又少吧
      

  10.   

    谁说我们IT人,比较木讷,其实,我们的内心也是很火热的,MM们快来看看吧!
      

  11.   

    编译不通过
    #erro1111 undefined declaration myGirlFriend!
      

  12.   

    空间复杂度太大,第一句循环就要好几年。 !myGirlFriend.like(me); 基本不能实现。
      

  13.   

    经测试发现把Girl全局查找替换成Boy之后编译不报错,并且瞬间出结果!!!
      

  14.   


    for(Girl girl = Girls.first(); !myGirlFriend.like(me); girl = Girls.next()){
      if(!girl.hasBoyFriend(now) && i.like(girl)){
      GirlFriend myGirlFriend = (GirlFriend)girl;
      }
    }
    這代碼寫的有問題啊,GirlFriend myGirlFriend = (GirlFriend)girl;
    出了這個if的大括號,變量就不可見了有沒有!花心如此活該沒有女友。
    至少得是全局靜態變量有沒有!
      

  15.   

    getMoney()
    return null ..
      

  16.   


    while(true) {
        Girl girl = AcceptGirl();
        ...... // 后面不用看了,这里阻塞5年
    }
      

  17.   

    对象面太窄,把Girls改为Persons就会有结果了
      

  18.   

    对呀,如果还不行,persons继续扩大,比如animal
      

  19.   

    Girl[] girls = World.getSingleGirls(); 
    for(Girl girl : girls){
        if (Relationship.check(me, girl, Relationship.GIRL_FRIEND)) {
            World.setPair(me, girl);
            Life.execute(me, girl);
            break;
        }
    }
      

  20.   

    NDY的。  我们跟你不是一个物种,非禽兽....
      

  21.   


    实在不行你条件再降低点
    if(!girl.hasBoyFriend(now) && isPerson(girl)){
      GirlFriend myGirlFriend = (GirlFriend)girl;
      }
      

  22.   

    参数me问题太大了,this 'me'  is girl or boy? how money,how house? 
      

  23.   

    因为如下这行代码:
    GirlFriend myGirlFriend = (GirlFriend)girl;myGirlFriend只是一个在循环体内声明的对象,出了变量的作用域就被垃圾回收器回收了。你应该将他添加到你的上下文里:
    Friends.GirlFriends.Add((GirlFriend)girl);
      

  24.   

    还要记得保存Friends.SaveChanges();
      

  25.   

    算法错了,me,或者girl每次update()过的都要重新匹配的,不过这样子复杂度就大了,建议对girl先行筛选再来匹配。
      

  26.   

    技术性问题,许多变量没定义不怪你,可以假定上面定义了,myGirlFriend循环体内定义,判断条件用,java可以这样写?没怎么用过java!
      

  27.   

    Man me;for(Girl girl = Girls.first(); !myGirlFriend.like(me)&&me.alive(); girl = Girls.next()){
    if(!girl.hasBoyFriend(now) && i.like(girl)){
    GirlFriend myGirlFriend = (GirlFriend)girl;
    me.m_money += getMoreMoney();
    if (CanBuyHouse(me)&&!me.m_house)
    {
    me.m_house = true;
    me.m_money -= housePay(); 
    }
    else if (CanBuyCar(me)&&!me.m_car)
    {
    me.m_car = true;
    me.m_money -= carPay(); 
    }
    }
    }[
      

  28.   

    getMoreMoney();这个函数返回值太小,有时还反回负值。
    结果导致if (CanBuyHouse(me)&&!me.m_house)
    if (CanBuyCar(me)&&!me.m_car)
    两个if执行总是失败
      

  29.   

    差不多如30楼和50楼所讲,你这是在原始myGirlFriend对象like不成立的情况下,不断地寻找新的GirlFriend,这样貌似更不会改变原始myGirlFriend的like状态吧。
    作为一个码农,基础语法和语言特征还是必须要正确掌握的。
      

  30.   

    class Girl {
        
        private boolean flag = true;
        
        public Girl() {
        }
        
        public Girl(boolean f) {
            this.flag = f;
        }
        
        public boolean like(Boy b) {
            return flag;
        }
        
        public boolean hasBoyFriend() {
            return false;
        }
        
        public GirlFriend toGirlFriend() {
            return new GirlFriend();
        }
        
    }class GirlFriend extends Girl {
    }class Boy {
        
        private boolean flag = true;
        
        public Boy() {
        }
        
        public Boy(boolean f) {
            this.flag = f;
        }
        
        public boolean like(Girl g) {
            return flag;
        }
        
        public static Boy getInstance() {
            return new Boy(false);
        }
    }class GirlList {
        
        public Girl next() {
            return new Girl();
        }
        
        public Girl first() {
            return new Girl();
        }
    }public class Test {
        
        public static void main(String[] args) {
            
            long t1 = System.currentTimeMillis();
            Boy me = Boy.getInstance();
            GirlList Girls = new GirlList();
            Girl myGirlFriend = new Girl(false);
            
            for (Girl girl = Girls.first(); !myGirlFriend.like(me); girl = Girls.next()) {
                System.out.println("next...");
                if (!girl.hasBoyFriend() && me.like(girl)) {
                    myGirlFriend = girl.toGirlFriend();
                }
            }
            long t2 = System.currentTimeMillis();
            System.out.println(t2 - t1);
        }
        
    }
      

  31.   


    while(true){
    try{
        Boy.findGirlFriend();
    }
    catch(OUTOFMONEYERROR a, NOHOUSEERROR b)
    {}
    }
      

  32.   


    还是没有必要吧!
    从girl转型到woman ,可以考虑下的嘛
      

  33.   

    你的春天来了,云计算.getGirls  总有一款适合你
      

  34.   

    楼主,我也恰好也是执行了5年没有结果,然后我做了个小修改,把i.like(girl)替换成!i.hate(girl),然后很快就出现了多个匹配,不过我确实是个程序员,所以在执行到第一个匹配后,循环就自动跳出了。
      

  35.   

    怀疑瓶颈在这一句:  GirlFriend myGirlFriend = (GirlFriend)girl;
    }
    楼主自己交代吧,这个对象拷贝的过程中都发生了什么?
    等号右边会不会是 (Woman)girl?还有啊,myGirlFriend 作用域只对当前循环有效,非外层的 myGirlFriend。
    外层的 !myGirlFriend.like(me) 始终满足,这也是捕获girl变量芳心的条件,对吧?
      

  36.   

    这段代码告诉我,
    身为高帅富的作者已经有一个GF但已经无爱,
    但是他还是坚持遍历了一个圈子里所有的MM,
    里面只要是他喜欢的、单身的MM,
    他就成功地将其纳为第二GF。
    当然,这个过程很短暂,可以理解为"曾经拥有"。
    全过程周而复始。
    甚至到了 Girls.next() 变成null还在继续。
    生命不止,码妹不息。(开个玩笑,楼主莫怪哈)
      

  37.   

    第一行代码因为myGirlFriend为空指针直接崩溃了。
      

  38.   

    for(Girl girl = Girls.first(); !myGirlFriend.like(me); girl = Girls.next()){
      if(!girl.hasBoyFriend(now) && i.like(girl)){
      GirlFriend myGirlFriend = (GirlFriend)girl;
      }
    }第一行代码很可能因为myGirlFriend为空指针就直接崩溃了。
    Girls.next()可能也是空指针,循环到第二行又崩溃了
    还有线程/进程安全性,你确定myGirlFriend、girl引用只存在于你的主线程/进程?最大问题是第三行代码中的myGirlFriend为内部引用,与第一行的myGirlFriend不是同一个对象,结果就陷入了死循环结论:别说5年了,以这种时间复杂度能有运行结果那可真是奇了怪了
      

  39.   


    我觉得有道理 因为LZ的myGirlFriend不断的重新制定且循环不间断制定出了问题
      

  40.   

    如果把myGirlFriend设置成final类型且为static 那么你就有了
      

  41.   

    getMoney()
    getHouse()
    Exception in thread "main" java.lang.NullPointerException哈哈哈!!!
      

  42.   

    个人觉得应该这样:
    if(i.like(girl)&&!girl.hasBoyFriend(now)){
    Person child = me.add(girl).getChild();
    if(child!=null){
    return true;
    }else{
    break;
    }
    }
    什么都解决了.....