zoukankan      html  css  js  c++  java
  • java踩雷日记--new

    java踩雷日记--new

    觉得有用的话,欢迎一起讨论相互学习~Follow Me

    1.数组元素中元素没有new导致数组为空

    SolutionSet[] Donminant_pop;
    Donminant_pop = new SolutionSet[NUMTASK];
    Solution newSolution = new Solution(problemSet_);
    B_pop[taskID].add(newSolution);
    
    • 错在B_pop[taskID]应该是一个SolutionSet,但是我没有new,所以导致数组中元素为空
     B_pop[taskID] = new SolutionSet(ND_eachtask);
    

    2.要用的对象要一次性new完,最好不要在调用的过程中或者循环的工程中重复new出新的对象

    • new一个对象时,传给一个变量名时,其中的数据会初始化,因此原先的元素都不保留了。对于List类型的元素来说有clear元素的效果
    // Create the initial solutionSet B0
           for (int taskID = 0; taskID < NUMTASK; taskID++) {
               //初始化所有pop
               for (int popindex = 0; popindex < ND_eachtask; popindex++) {
                   Solution newSolution = new Solution(problemSet_);
                   problemSet_.get(taskID).evaluate(newSolution);
                   problemSet_.get(taskID).evaluateConstraints(newSolution);
                   evaluations++;
                   // 初始建立种群时,为每个个体随机分配一个合适的任务即SkillFactor
                   newSolution.setSkillFactor(taskID);
                   B_pop[taskID] = new SolutionSet(ND_eachtask);
                   B_pop[taskID].add(newSolution);
               }
           }
    
    • 例如此处就写错了,此处B_pop中只有一个元素,即B_pop[0],而且B_pop[0]中只有一个元素,就是newSolution,因为内层循环时,每次都会更新B_pop中的元素,所以B_pop中的元素没有保留。而且每次都在这个基础上添加一个元素,然后又重置了。
    • 只有将B_pop的new函数写在循环的外部才是正确的。
    // Create the initial solutionSet B0
           for (int taskID = 0; taskID < NUMTASK; taskID++) {
               //初始化所有pop
               B_pop[taskID] = new SolutionSet(ND_eachtask);
               for (int popindex = 0; popindex < ND_eachtask; popindex++) {
                   Solution newSolution = new Solution(problemSet_);
                   problemSet_.get(taskID).evaluate(newSolution);
                   problemSet_.get(taskID).evaluateConstraints(newSolution);
                   evaluations++;
                   // 初始建立种群时,为每个个体随机分配一个合适的任务即SkillFactor
                   newSolution.setSkillFactor(taskID);
                   B_pop[taskID].add(newSolution);
               }
           }
    
    • 这样B_pop中有NUMTASK个维度,而每个维度中又有ND_eachtask个元素。

    3.要注意new对象的生命周期

    • 对于类型的属性的来说,其生命周期存在于该类型变量的所有函数,但是局部变量只存在于变量域中。
  • 相关阅读:
    fastclick插件 导致 input[type="date"] 无法触发问题解决方案
    mysql,命令导入导出表结构或数据
    python使用requests库请求网址时,发生requests.exceptions.SSLError 错误解决办法
    Python使用random.shuffle()随机打乱字典排序
    Zend Studio 配置SVN并导入SVN项目
    ZendStudio调试配置(XDebug)
    PHP会话机制---session的基本使用
    PHP统计当前网站的访问人数,访问信息,被多少次访问。
    题解【luoguP1351 NOIp提高组2014 联合权值】
    题解【luogu P2421 bzoj P1407 [NOI2002]荒岛野人】
  • 原文地址:https://www.cnblogs.com/cloud-ken/p/12103059.html
Copyright © 2011-2022 走看看