java 踩雷日记--new

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 对象的生命周期

  • 对于类型的属性的来说,其生命周期存在于该类型变量的所有函数,但是局部变量只存在于变量域中。

本文分享自微信公众号 - DrawSky(wustcsken),作者:CloudXu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Numpy根据Bool值挑选数组中元素

    DrawSky
  • [DeeplearningAI 笔记]第二章 2.3-2.5 带修正偏差的指数加权平均

    是取 0.9,那么这个 V 值表示的是十天以来的温度的加权平均值.如果我们设置

    DrawSky
  • 一起来学演化计算-matlab基本数据结构struct

    DrawSky
  • iOS 秒杀倒计时 从服务器获得时间戳秒杀开始和结束倒计时。

    +(NSArray *)getTwoDataMin:(NSString *)stamp1 andWith:(NSString *)stamp2{

    ZY_FlyWay
  • pandas(二)

      index=[('a',2010),('b',2011),('c',2010'),('a',2012),('e',2010),('f',2011)]

    py3study
  • layui使用心得

    表单控件样式没生效, 因为没引入form. 1 layui.use('form', function(){ 2 var form...

    用户1216491
  • C#笔记:异步的简单实现

    在.net4.5之后。为了让异步变的更人性化。引入了两个关键字 async 和await.将异步操作从一大堆 beginInvoke 和 endInvoke中解...

    超级大猪
  • 华为oj之计算字符个数

    写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。

    Enjoy233
  • Python气象绘图实例-我们一起画台风(代码+数据)

    前段时间袭击中国的超强台风“利奇马”,以及这两天袭击美国的五级飓风“多利安”,让我们感受到了大自然的力量。所以,今天分享一个简单的Python实例,也算是延续前...

    zhangqibot
  • Android--PathMeasure基本用法

    aruba

扫码关注云+社区

领取腾讯云代金券