2016-04-07 5 views
0

私は検索と読書で一日中このことを把握しようとしていますが、それは単純なものでなければならないことはわかっていますが、最後のコードは一番下です私は入力されたものを印刷するメソッドを作成しようとしていますが、このエラーが発生し続けます。変数にアクセスできません - 文脈外です

エラーCS0103名「STUDENT1」は現在のコンテキスト内に存在しない
エラーCS0103名「teacher1は、」名前「course1」は現在のコンテキスト内に存在しない現在のコンテキストで エラーCS0103存在しない

私は正しい方向に私を向けることができ、少なくとも私にヒントを与えることができれば、私は永遠に感謝しています。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace StudentInformation 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 

     Console.WriteLine("What would you like to do? Please choose a number: "); 
     Console.WriteLine(""); 
     Console.WriteLine("1. Enter Student Information"); 
     Console.WriteLine("2. Enter Teacher Information"); 
     Console.WriteLine("3. Enter Class Information"); 
     Console.WriteLine(); 
     int menuOne = Convert.ToInt32(Console.ReadLine()); 

     if (menuOne == 1) 
     { 
      GetStudent(); 
     } 
     else if (menuOne == 2) 
     { 
      GetTeacher(); 
     } 
     else if (menuOne == 3) 
     { 
      GetClass(); 
     } 
     else 
     { 
      Console.WriteLine("Incorrect input. Exiting application."); 
      Console.ReadLine(); 
     } 

    } 


    public class Student 
    { 
     public string fName { get; set; } 
     public string lName { get; set; } 
     public string bDate { get; set; } 
    } 

    public class Teacher 
    { 
     public string tFName { get; set; } 
     public string tLName { get; set; } 
     public string tClass { get; set; } 
    } 

    public class Course 
    { 
     public string cName { get; set; } 
     public string cSubject { get; set; } 
     public string cStart { get; set; } 
    } 

    static void GetTeacher() 
    { 
     Teacher teacher1 = new Teacher(); 

     Console.WriteLine("Enter teacher's first name: "); 
     teacher1.tFName = Console.ReadLine(); 
     Console.WriteLine("Enter teacher's last name: "); 
     teacher1.tLName = Console.ReadLine(); 
     Console.WriteLine("Enter teacher's class name: "); 
     teacher1.tClass = Console.ReadLine(); 


    } 

    static void GetStudent() 
    { 
     Student student1 = new Student(); 

     Console.WriteLine("Enter student's first name: "); 
     student1.fName = Console.ReadLine(); 
     Console.WriteLine("Enter student's last name: "); 
     student1.lName = Console.ReadLine(); 
     Console.WriteLine("Enter student's birthdate: "); 
     student1.bDate = Console.ReadLine(); 
     PrintStudent(); 

    } 

    static string GetClass() 
    { 
     Course course1 = new Course(); 

     Console.WriteLine("Enter class name: "); 
     course1.cName = Console.ReadLine(); 
     Console.WriteLine("Enter class subject: "); 
     course1.cSubject = Console.ReadLine(); 
     Console.WriteLine("Enter class start time: "); 
     course1.cStart = Console.ReadLine(); 
     return course1.cName; 
    } 

    static void PrintStudent()//Going to add PrintTeacher and PrintCourses as well after I figure this out 
    { 
     //string student1.fName = GetStudent(); 
     // Console.WriteLine(fName); 
     Console.WriteLine("{0} and {1} are in {2}", student1.fname, teacher1.tFName, course1.cName); 
    } 

} 
} 
+0

これらはローカル変数です... –

+0

このコードは、すべての関節をクリアする必要があります! –

+0

あなたは 'fName'や' cFName'のような暗黙のIDを避けるべきです。普通の古い「FirstName」は、どちらの場合でもうまくいくでしょう。 –

答えて

2

あなたのすべての変数course1student1teacher1はそれぞれ方法GetClassGetStudentGetTeacherに対してローカルです。

あなたがそれらのようにアクセスする場合は、クラス変数にする必要があります。 「取得」メソッドは、ユーザーの入力を必要とするが、これは動作しません

Console.WriteLine("{0} and {1} are in {2}", GetStudent(), GetTeacher(), GetClass()); 

:しかし、して詳細を書き出すあなたの文を置き換えるためにはるかに簡単になります。ユーザー入力を保持する変数をクラス変数にする必要があります。

これらの値を返すメソッドが作成されていますが、使用していないようですが、GetClassメソッドのみが値を返します。 GetTeacherメソッドは、ユーザーから値を読み込み、それに何もしません。

最後にPrintStudentメソッドはGetStudentから呼び出されます。あなたがあなたのコードの構造を変更する必要があるとしているクラスや教師だけでなく外に印刷したい場合は、

static void PrintStudent(string studentName) 
{ 
    Console.WriteLine(studentName); // Plus formatting 
} 

しかし:あなたは、その構造を使用したい場合は、この方法に生徒の名前を渡す必要があります非常に根本的です。そうしないと、printメソッドを呼び出すprintメソッドで無限の再帰が発生する可能性があります。

コードをどのように構造化してから一貫性を持たせるかを決める必要があります。論理を最初に標準言語で書く - これは実際に必要な方法と構造を特定するのに役立ちます。これを擬似コードに変換し、最終的にコード化することができます。

+0

彼は行っています彼の優秀な方法を変えなければならないか、あなたは無限ループに入ってしまいます! –

+0

@ JoshStevens - それを逃した。 – ChrisF

+0

そこにもすべてのボイドがあるので、値を返さないでしょう。 –

関連する問題