2012-07-20 34 views
-1

我需要找到最老的和最年轻的学生。最终用户必须将bday输入到一个字符串中。我的代码的逻辑有什么问题?

DateTime young = DateTime.MinValue; 
DateTime old = DateTime.MinValue; 

foreach (var d in students) 
{ 
    try 
    { 
     DateTime dt = Convert.ToDateTime(d.dob); 
     int result = DateTime.Compare(young, dt); 
     if (result < 0) 
     { 
      old = dt; 
     } 

     if (result > 0) 
     { 
      young = dt; 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message.ToString()); 
    } 
} 

Console.WriteLine("the youngest age is {0}",young); 
Console.WriteLine("the oldest age is {0}", old); 

逻辑有问题,我无法得到确切的输出。

回答

0
if (dt < young) 
{ 
    young = dt; 
} 

if (old < dt) 
{ 
    old = dt 
} 
+0

调试时,我意识到字符串没有转换为datetime.how我纠正吗? – user1528508 2012-07-20 07:29:37

+0

看看这里:http://msdn.microsoft.com/en-us/library/1k1skd40.aspx – 2012-07-20 08:13:08

4

看一看这一部分:

int result = DateTime.Compare(young, dt); 
if (result < 0) 
{ 
    old = dt; 
} 

确实看起来你的权利?您是否真的应根据候选值是否早于最小值来调整最早的值?

另外:

  • 的运算符重载为DateTime值的比较可以作出这样代码更简单。
  • 使用earliestlatest会比oldestyoungest更清楚;最老的人是一个从最早的生日,但在日期而言,早期和晚期更有意义
  • 你的初始值youngold是相同的......想想这是否是真的是你想要的东西。 (提示:你想表现的上限和下限的值,如果那些开始为相同值,你就麻烦了...。)
+0

我想我可以计算在每个实例的年龄,并比较相反...这是我想出了。 – user1528508 2012-07-20 11:33:01

+0

DateTime nw = DateTime.Now; DateTime dt = Convert.ToDateTime(ma.dob); TimeSpan span = nw.Subtract(dt); int age = span.Days; – user1528508 2012-07-20 11:37:58

1

你需要比较DT旧(如果它更老),并将其与年轻(如果它更年轻)进行比较。

DateTime young = DateTime.MinValue; 
DateTime old = DateTime.MaxValue; 
foreach (var d in students) 
{ 
DateTime dt = Convert.ToDateTime(d.dob); 
old = old < dt ? old : dt; 
young = young > dt ? young : dt; 
} 
Console.WriteLine("the youngest age is {0}", young); 
Console.WriteLine("the oldest age is {0}", old); 
2

有若有所失有你分配int result = DateTime.Compare(young, dt); 我觉得跟错分配相关的问题......你需要检查年轻年长

try 
{ 
    DateTime dt = Convert.ToDateTime(d.dob); // and what is dob ? 
    int result = DateTime.Compare(young, dt); 
    if (result < 0) 
    { 
     old = dt; 
    } 

    if (result > 0) 
    { 
     young = dt; 
    } 
} 
+0

这个片段是最终用户输入学生姓名,出生日期,班级和总分的程序的一部分。这里的dob是学生课程的一个对象。 – user1528508 2012-07-20 11:19:44

0

日期时间MV = DOB;

    string oldname=sName; 
        string youngname=sName; 




        foreach (var mo in students) 
        { 
         int result = DateTime.Compare(mo.dob, mv); 

         if (result == -1) 
         { 
          mv = mo.dob; 
          oldname = mo.name; 
         } 

         if (result == 1) 
         { 
          mv = mo.dob; 
          youngname = mo.name; 
         } 
        } 


        Console.WriteLine("the youngest student is: {0}", youngname); 
        Console.WriteLine(); 

        Console.WriteLine("the oldest student is: {0}", oldname); 
        Console.WriteLine();