2016-11-04 103 views
0
public float[] HitungFitness() 
{ 
    float[] fitness = new float[populasi]; 
    for (var individu = 0; individu < populasi; individu++) 
    { 
     fitness[individu] = CekConstraint(individu); 
    } 
    string[] sort = new string[populasi]; 
    for (int i = 0; i < populasi; i++) 
    { 
     sort[i] = string.Format("\nIndividu {0} :Fitness {1}",(i + 1), fitness[i]); 
    } 
     bool swapped = true; 
     while (swapped) 
     { 
      swapped = false; 
      for (int i = 0; i < populasi-1 ; i++) 
      { 
       string[] strI = sort[i].Split('.'); 
       float fitI = float.Parse(string.Format("0.{0}", strI[1])); 

       string[] strJ = sort[i + 1].Split('.'); 
       float fitJ = float.Parse(string.Format("0.{0}", strJ[1])); 

       if (fitI < fitJ) 
       { 
        string sTmp = sort[i]; 
        sort[i] = sort[i + 1]; 
        sort[i + 1] = sTmp; 
        swapped = true; 
       } 
      } 
     } 
    return fitness; 
} 

可變populasi賦值= 12獲取錯誤 'System.IndexOutOfRangeException'

函數CekConstraint是給之間的返回值 '0 ***' 爲 '1'

我有一個問題搭配:

float fitI = float.Parse(string.Format("0.{0}", strI[1])); 

float fitJ = float.Parse(string.Format("0.{0}", strI[1])); 

strIstrJ只給一個數組的值如strJ[1]stri[1]然後我得到索引超出數組的界限。我承認錯誤,但我該如何解決這個問題?

請幫幫我。

+0

我想這個問題是你的分割應該是':',而不是'.',所以改變這種排序'[I] .Split( '') ;'into this'sort [i] .Split(':');' – Pikoh

+0

sort []數組元素包含「。」的唯一場景。在你寫入的fitness []元素的小數點中。當您調用** strI [1] **時,您將sort []元素除以「。」。並檢索第二個元素,因此您將檢索其中包含的fitness []元素的小數部分,但如果這個元素沒有小數點,則會顯示「。」。不會出現,因此也不會包含多個元素 – Innat3

回答

0

錯誤是因爲它不是在strI[1]strJ[1]中獲得價值。它可能發生,因爲在sort[i]中找不到"."。因此我們可以看到基於strIstrJ數組長度的條件。

改變內心for循環

for (int i = 0; i < populasi-1 ; i++) 
{ 
    float fitI = 0.0; 
    float fitJ = 0.0; 
    string[] strI = sort[i].Split('.'); 
    if(strI.Length > 1) 
     fitI = float.Parse(string.Format("0.{0}", strI[1])); 


    string[] strJ = sort[i + 1].Split('.'); 

    if(strJ.Length > 1) 
     fitJ = float.Parse(string.Format("0.{0}", strJ[1])); 


    if (fitI < fitJ) 
    { 
     string sTmp = sort[i]; 
     sort[i] = sort[i + 1]; 
     sort[i + 1] = sTmp; 
     swapped = true; 
    } 
} 
+0

哦謝謝你,感謝你的工作 –

+0

歡迎你。 :) – captainsac

2
string[] strI = sort[i].Split('.'); 
float fitI = float.Parse(string.Format("0.{0}", strI[1])); 

sort[i]字符串沒有.在裏面。正因爲如此,當你打電話給Split('.')時,你只能生成1個項目的數組。因爲你在strI[1]上收到了異常,所以在strI數組中沒有第二個元素。

-3

爲什麼這麼多的循環,使用一個列表或dictinary的地方或數組,並使用foreach循環,以避免超出範圍的異常。

float[] fitness = new float[populasi]; 
//create a list for this 

string[] sort = new string[populasi]; 
//another list 
and do foreach looping 
+0

這不是問題的答案,而是優化代碼的建議。它應該是對原始問題的評論。 –