2012-03-05 12 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 (int xx = 0; xx < tedad; xx++){ 
    chorm[xx] = new Chromosome(); 
    chorm[xx].abad(ab); 
} 

Chromosomeのコンストラクタは、それを必要とする場合は、new Chromosomeにいくつかの値を配置する必要がある場合があります。

+0

ありがとう –

1

chorm[xx]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] 

あなたはそれがnullであることがわかります。配列を適切に初期化します。つまり、どの染色体でこのメソッドを実行しますか?あなたは、例えば、chorm配列にChromosomeのインスタンスを追加する必要が

0

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

p.s.あなたは本当にあなたの変数名を見ることができます!

0

オブジェクト参照がオブジェクトのインスタンスに設定されていません。インターフェイス上にいくつかのテキストボックスを表示できないことを意味します。 エラーを襲ったテキストボックスを参照してデバッグしてみてください。 uはintに変換する場合。 urテキストボックスが空でなく、int値であることを確認してください。 すべてのurint変数を初期化する必要があります

int xxx=0; 
関連する問題