2016-06-18 18 views
0

私はC#を初めて使っています。私は学生名とその他のいくつかのことを取る「学生」クラスを作ってみました。私は入力として名前を入力するときに例外が発生するので、学生の名前をとる際に問題があります。C言語のクラス変数への文字列入力

は宣言では、

public class Student 
{ 
    public string studentName;// this one 
    public long studentID; 
    public int score1; 
    ...etc 
} 

は、私がメインの内側にあります。

Student[] student = new Student[N]; 
// the N is determined by a previous block of code. 
for (int i = 0; i < N; i++) 
{ 
    check = false; // ignore this one. 
    Console.WriteLine("Student {0}", i + 1); 
    Console.Write("\t \t Name: "); 
    string input = Console.ReadLine(); 
    student[i].studentName = input; 
    // I get an exception at that last line, after typing whatever string.I feel like I've done something horribly wrong. 
} 

感謝:)

+0

を行う必要がありますあなたが得る例外は何ですか? –

+0

ようこそスタックオーバーフロー! [ツアー](http://stackoverflow.com/tour)、[ヘルプセンター](http://stackoverflow.com/help)、[良い質問をする方法](http://このサイトがどのように機能するかを確認し、現在および将来の質問を改善するのに役立ち、より良い回答を得るのに役立ちます。 –

+0

RandomCoding.exeで 'System.NullReferenceException'型の未処理の例外が発生しました – MoodyW

答えて

4

をあなたは学生の配列を宣言していますが学生のインスタンスでそれを初期化しませんでした。 すなわち student [i]がnullです。

for (int i = 0; i < N; i++) { 

後あなたは

student[i] = new Student(); 
// Rest of the code. 
+0

1行目:Student [] student = new Student [N]; – MoodyW

+1

いいえ、私はループ内を意味します。新しい学生[N]はスペースを予約するだけで、スペースを割り当てません。私があなたに与えた行をループの最初の行として追加するか、student [i]を使用する直前に追加すると、問題が修正されます。 –

+1

Worked!基本的に何が起こったのかは、必要なN人の学生を割り当てたことですが、私はそれぞれの人のためにメモリを割り当てていませんでしたか?再度、感謝します :) – MoodyW

0
using System; 
using System.Collections.Generic; 

public class Student 
{ 
    public string studentName { get;set;} 
    public long studentID; 
    public int score1; 
} 

public class Test 
{ 
    public static void Main() 
    { 
     var students = new List<Student>(); 
     for (int i = 0; i < 3; i++) 
     { 
      Console.WriteLine("Student {0}", i + 1); 
      Console.Write("\t \t Name: "); 
      string input = Console.ReadLine(); 
      students.Add(new Student {studentName = input }); 
     }      
    } 
} 
0
Student[] student = new Student[N]; 
// the N is determined by a previous block of code. 
for (int i = 0; i < N; i++) 
{ 
    student[i] = new Student(); 
    check = false; // ignore this one. 
    Console.WriteLine("Student {0}", i + 1); 
    Console.Write("\t \t Name: "); 
    string input = Console.ReadLine(); 
    student[i].studentName = input; 
} 
0
for (int i = 0; i < N; i++) 
{ 
    check = false; // ignore this one. 
    Console.WriteLine("Student {0}", i + 1); 
    Console.Write("\t \t Name: "); 
    string input = Console.ReadLine(); 
you are missing line below. 
    student[i]= new student(); 
    student[i].studentName = input; 

} 
関連する問題