java踩雷日记--new

java踩雷日记--new

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

我的微博我的github我的B站

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

  • 对于类型的属性的来说,其生命周期存在于该类型变量的所有函数,但是局部变量只存在于变量域中。
posted @   WUST许志伟  阅读(189)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示