2012-03-05 101 views
-4

可能重複:
What is a NullReferenceException in .NET?下面的代碼有什麼問題?

我得到這個錯誤 「對象引用不設置到對象的實例。」

public class Chromosome 
{ 
    public int[] gen; 

    public void abad(int nn) 
    { 
     gen = new int[nn]; 
    } 

    public int fit; 
} 


public void button1_Click(object sender, EventArgs e) 
{ 
    Chromosome[] chorm; 
    int ab; 

    ab = Convert.ToInt16(txtab.Text); 
    int ehtemal; 

    ehtemal = Convert.ToInt16(txtehtemal.Text); //ehtemal jahesh gen 
    int nokhbe; 

    nokhbe = Convert.ToInt16(txtnokh.Text); 
    int tedad; 

    num = Convert.ToInt16(txtnum.Text); 
    chorm = new Chromosome[tedad + 1]; 
    for (int xx = 0; xx < tedad; xx++) 
     chorm[xx].abad(ab); 
    int ad = tedad; 
    int row = 0 ,col = 0 ; 
} 

for (int z = 0; z < ab; z++) 
    temp.gen[z] = chorm[i].gen[z]; 

錯誤發生在線路chorm[xx].abad(ab)和最後兩行

回答

0
chorm = new Chromosome[tedad + 1]; 

上述代碼初始化數組而不是數組元素。 你需要自己初始化的元素:

for(int i=0;i<chorm.length;i++) 
    chorm[i] = new Chromosome(); 
2

那是因爲你已經初始化數組new Chromosome[tedad + 1];,而不是元素中。試着改變你的for循環是這樣的:

for (int xx = 0; xx < tedad; xx++){ 
    chorm[xx] = new Chromosome(); 
    chorm[xx].abad(ab); 
} 

你可能需要把一些值到new Chromosome如果Chromosome構造需要它。

+0

非常感謝你 – 2012-03-05 12:33:08

1

您正在嘗試使用chorm[xx](a Chromosome),而無需先構建此類實例。這是因爲由new Chromosome[tedad + 1]返回的數組在內部有tedad + 1個對象的空間,但實際上尚未創建對象。

這樣做:

for (int xx = 0; xx < tedad; xx++) 
{ 
    chorm[xx] = new Chromosome(); // add this line 
    chorm[xx].abad(ab); 
} 
0

你在這個數組項舉行的染色體上調用一個方法:

chorm[xx].abad(ab); 

,但你沒有初始化與染色體陣列條目。如果你檢查

chorm[xx] 

你會發現它是空的。正確初始化您的陣列,即您期望執行此方法的染色體是什麼?

0

您需要將Chromosome的實例添加到chorm陣列中,例如,

for (int xx = 0; xx < tedad; xx++){ 
    Chromosome c = new Chromosome(); 
    c.abad(ab); 
    chorm[xx] = c; 
} 

p.s.你真的可以看看你的變量名!

0

未將對象引用設置爲對象的實例。意味着你不能在界面上顯示一些文本框。 嘗試調試以查看哪個文本框發生錯誤。 如果你轉換爲int。確保你的文本框不是空的,並且是int值。 所有你的詮釋變量應初始化

int xxx=0;