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

ロジックに問題があり、正確な出力を取得できません。

4

5 に答える 5

4

この部分を見てください:

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

それはあなたに正しく見えますか?候補値が最も若い値よりも古いかどうかに基づいて、最も古い値を調整する必要がありますか?

また:

  • 値の比較のための演算子のオーバーロードにより、DateTimeこのようなコードをより簡単にすることができます
  • earliestandを使用latestすると、 and よりも明確にoldestなりyoungestます。最年長者は誕生日が最も早い人ですが、日付に関しては、早い方と遅い方が理にかなっています
  • youngとの初期値oldは同じです...それが本当にあなたが望んでいたものかどうか考えてみてください。(ヒント: 値の上限と下限を表現しようとしています。それらが同じ値として始まると、問題が発生します...)
于 2012-07-20T07:22:40.363 に答える
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;
    }
}
于 2012-07-20T07:28:55.633 に答える
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);
于 2012-07-20T07:26:51.890 に答える
0
if ( dt < young )
{
   young = dt;
}

if ( old < dt )
{
   old = dt
}
于 2012-07-20T07:22:19.643 に答える