2013-10-06 29 views
1

我有一个家庭作业的坚持者,我需要另一套眼睛。这项任务是创建一个提示输入学生姓名的程序,然后遍历数天(String[] days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};),提示每天学习几个小时。最后,该计划将显示本周研究的每日平均小时数。我可以使用tryParse输出参数在for循环中填充数组吗?

我卡与数据输入方法:

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是上面的String[],并且我已经将hours例示为int[] hours;,其范围与days相同。 SumHours是另一种接受int[] 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 

我试过实例hoursint[] hours = new int[7];,但得到了同样的错误,所以我怀疑它的东西与我输出解析整数的方式,但我除了解决问题之外,我不知道要看什么。想法?提示?

+0

没有检查其结果就没有意义使用TryParse。你不知道解析是否成功。 –

+0

您能否提供更多详细信息,例如您用于初始化'StudentHour'类,'StudentHour'类构造函数的代码? –

+0

赋值给数组单元的问题可以通过引入临时变量来解决。 –

回答

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); 
     } 

代替字符串数组,你可以使用一个枚举使用这些值。

0

你的声明必须有一些错误,因为int[] hours = new int[7]不应该给你null引用异常。使用返回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); 
0

您的代码运行正常。这是证明。

enter image description here

-2
var hours= new strinh[7]; 
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]); 

      hours[i]= = Console.ReadLine(); 
     } 
     SumHours(hours); 
    } 

public void SumHours(string[] hrs) 

{ 
    int i=0; 
    foreach(string s in hrs) 
{ 
    i=i+ParseInt(s); 
} 
Console.WriteLine("Total Weekly hours study= "+i); 
} 

private int ParseInt(string s) 
{ 
    int i =0; 
    if(!int.TryParse(s, out i)) 
    { 
    return 0; 
    } 
    return i; 
} 
0

你没有赋值到它之前初始化数组“小时”。