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對象的生命週期

  • 對於類型的屬性的來說,其生命週期存在於該類型變量的所有函數,但是局部變量只存在於變量域中。
發佈了266 篇原創文章 · 獲贊 172 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章