前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 踩雷日记--new

java 踩雷日记--new

作者头像
演化计算与人工智能
发布2020-08-14 16:26:19
3140
发布2020-08-14 16:26:19
举报

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

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

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

  • new 一个对象时,传给一个变量名时,其中的数据会初始化,因此原先的元素都不保留了。对于 List 类型的元素来说有 clear 元素的效果
代码语言:javascript
复制
// 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 函数写在循环的外部才是正确的。
代码语言:javascript
复制
// 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 对象的生命周期

  • 对于类型的属性的来说,其生命周期存在于该类型变量的所有函数,但是局部变量只存在于变量域中。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DrawSky 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.数组元素中元素没有 new 导致数组为空
  • 2.要用的对象要一次性 new 完,最好不要在调用的过程中或者循环的工程中重复 new 出新的对象
  • 3.要注意 new 对象的生命周期
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档