我的代码的逻辑有什么问题?
我需要找到最老的和最年轻的学生。最终用户必须将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);
逻辑有问题,我无法得到确切的输出。
if (dt < young)
{
young = dt;
}
if (old < dt)
{
old = dt
}
看一看这一部分:
int result = DateTime.Compare(young, dt);
if (result < 0)
{
old = dt;
}
确实看起来你的权利?您是否真的应根据候选值是否早于最小值来调整最早的值?
另外:
- 的运算符重载为
DateTime
值的比较可以作出这样多代码更简单。 - 使用
earliest
和latest
会比oldest
和youngest
更清楚;最老的人是一个从最早的生日,但在日期而言,早期和晚期更有意义 - 你的初始值
young
和old
是相同的......想想这是否是真的是你想要的东西。 (提示:你想表现的上限和下限的值,如果那些开始为相同值,你就麻烦了...。)
我想我可以计算在每个实例的年龄,并比较相反...这是我想出了。 – user1528508 2012-07-20 11:33:01
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
你需要比较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);
有若有所失有你分配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;
}
}
这个片段是最终用户输入学生姓名,出生日期,班级和总分的程序的一部分。这里的dob是学生课程的一个对象。 – user1528508 2012-07-20 11:19:44
日期时间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();
调试时,我意识到字符串没有转换为datetime.how我纠正吗? – user1528508 2012-07-20 07:29:37
看看这里:http://msdn.microsoft.com/en-us/library/1k1skd40.aspx – 2012-07-20 08:13:08