当前位置:  开发笔记 > 编程语言 > 正文

如何查找时钟的秒针是在更大的区域还是更小的区域

如何解决《如何查找时钟的秒针是在更大的区域还是更小的区域》经验,为你挑选了1个好方法。



1> TheLethalCod..:

这个问题引起了我的兴趣所以我继续写了一个测试项目C#.据我所知,它必须进行测试才能确定.

这是代码:

string strTime = "10:15:00";

DateTime dt = DateTime.ParseExact(strTime, "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);

int nHourDegrees = (360 / 12) * dt.Hour;
int nMinuteDegrees = (360 / 60) * dt.Minute;
int nSecondDegrees = (360 / 60) * dt.Second;

if (nHourDegrees > nMinuteDegrees)
{
    int nArea1 = nHourDegrees - nMinuteDegrees;
    int nArea2 = 360 - nArea1;

    bool bArea1IsBigger = (nArea1 >= nArea2);
    if (nSecondDegrees <= nHourDegrees && nSecondDegrees >= nMinuteDegrees)
    {
        //Second hand lies in area1
        if (bArea1IsBigger)
        {
            Console.WriteLine("Second hand is in the larger area");
        }
        else
        {
            Console.WriteLine("Second hand is in the smaller area");
        }
    }
    else
    {
        if (bArea1IsBigger)
        {
            Console.WriteLine("Second hand is in the smaller area");
        }
        else
        {
            Console.WriteLine("Second hand is in the larger area");
        }
    }
}
else if (nMinuteDegrees > nHourDegrees)
{
    int nArea1 = nMinuteDegrees - nHourDegrees;
    int nArea2 = 360 - nArea1;

    bool bArea1IsBigger = (nArea1 >= nArea2);
    if (nSecondDegrees <= nMinuteDegrees && nSecondDegrees >= nHourDegrees)
    {
        //Second hand lies in area1
        if (bArea1IsBigger)
        {
            Console.WriteLine("Second hand is in the larger area");
        }
        else
        {
            Console.WriteLine("Second hand is in the smaller area");
        }
    }
    else
    {
        if (bArea1IsBigger)
        {
            Console.WriteLine("Second hand is in the smaller area");
        }
        else
        {
            Console.WriteLine("Second hand is in the larger area");
        }
    }
}
else
{
    if (nSecondDegrees == nHourDegrees)
    {
        Console.WriteLine("Second hand is on both of the other hands");
    }
    else
    {
        Console.WriteLine("Second hand is in the ONLY area");
    }
}

我们的想法是找到时针和分针之间的区域.然后检查秒针是否在此区域内.我们还将这个区域与另一个区域进行比较,然后我们可以很容易地推断出秒针是否在两者中较小或较大.

注意:可以对代码进行一些改进:

    它可以明显缩短 - 我没有这样做,因为它主要是测试/证明如何做到这一点

    如果超时(即24小时不是12小时),则必须进行更改.即减去12

    如果时间转到12/60/60而不是回到0,则必须手动完成

    可以添加常量以消除对幻数的需要

    与上面类似,但常见的计算360 / 12可以移动到常量

    它可以分解为单独的方法以提高可读性

    可以移动到辅助方法即 bool IsInLargerArea(string timeString)

    当区域大小相同时需要添加大小写,此时我假设Area1它们相等即大>=(即大于或等于)

    添加检查以确保straTimes阵列只有3个部分

    还有一些我没有想过的事情

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有