1

宿題に執着する人がいて、そのために別の目が必要です。課題は、生徒の名前を入力するように求めるプログラムを作成し、次に、String[] days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};毎日の学習時間数を求めるように、日の配列 ( ) を反復処理することです。最後に、プログラムは 1 週間の毎日の平均学習時間を表示します。

私はデータ入力方法にこだわっています:

    public void EnterHours()
    {
         // entry area header
        Console.WriteLine("Enter study hours for {0} ", name);
        for (int i = 0; i < days.Length; i++) 
        {
            Console.Write("{0}'s study hours: ", days[i]);
            string dailyHours = Console.ReadLine();
            int.TryParse(dailyHours, out hours[i]);    // problematic statement
        }
        SumHours(hours);
    }

現在、name変数は既に設定されているプロパティです。daysは上記で、 と同じスコープで as をインスタンスString[]化しました。SumHours は、パラメーターとして受け入れ、値を合計する配列を反復処理する別のメソッドです。hoursint[] hours;daysint[] hours

プログラムを実行すると、コンソールが表示されます

Enter study hours for John Doe

Sunday's study hours:

しかし、何を入力しても、Null Reference Exception. 次の警告メッセージも表示されます。

Warning 1   Field 'Midterm.StudentHour.hours' is never assigned to, and will always have its default value null C:\Users\Dan\Dropbox\_MATC\ITDEV115\Assignments\Midterm\StudentHour.cs  11  15  Midterm

hoursas をインスタンス化しようとしましint[] hours = new int[7];たが、同じエラーが発生するため、解析された整数を出力する方法に問題があると思われますが、問題を解決するためにそれ以上に何を見ればよいかわかりません。アイデア?ヒント?

4

4 に答える 4

1

私はこれがあなたを助けると思います:

        String[] days = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
        Dictionary<string, int> hours = new Dictionary<string, int>();
        for (int i = 0; i < days.Length; i++)
        {
            int dailyHours;
            Console.Write("{0}'s study hours: ", days[i]);
            while (int.TryParse(Console.ReadLine(), out dailyHours) != true)
            {
                Console.WriteLine("Wrong input,must be only numbers!!!");
                Console.Write("{0}'s study hours: ", days[i]);
            }
            //if(int.TryParse(Console.ReadLine(),out dailyHours))
            hours.Add(days[i], dailyHours);
        }

文字列配列の代わりに、これらの値で列挙型を使用できます。

于 2013-10-06T16:40:54.313 に答える
0

int[] hours = new int[7]null 参照例外を与えるべきではないため、宣言に何らかのエラーがあるはずです。の return も使用してTryParse、入力が有効かどうかを確認します。次のコードは私にとってはうまくいきます:

string[] days = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
string name = "JLe";
int[] hours = new int[7];

Console.WriteLine("Enter study hours for {0} ", name);
for (int i = 0; i < days.Length; i++) {
    Console.Write("{0}'s study hours: ", days[i]);
    string dailyHours = Console.ReadLine();

    while (!int.TryParse(dailyHours, out hours[i])) {
        Console.Write("Please try again: ");
        dailyHours = Console.ReadLine();
    }
}
SumHours(hours);
于 2013-10-06T16:25:31.590 に答える
0

あなたのコードは正常に動作しています。これが証拠です。

ここに画像の説明を入力

于 2013-10-06T16:26:35.623 に答える
0

値を割り当てる前に、配列「時間」を初期化しませんでした。

于 2013-10-06T16:28:23.557 に答える