C# 有没有更简洁的方法来解决这个问题?

C# 有没有更简洁的方法来解决这个问题?,c#,C#,我是c#的初学者。所以我试图解决这个问题: 你开得有点太快了,一个警察拦住了你。编写代码计算结果,编码为int值:0=无票,1=小票,2=大票。如果速度小于等于60,则结果为0。如果速度介于61和80之间,则结果为1。如果速度大于等于81,则结果为2。除非是你的生日——在那天,你的速度在任何情况下都可以提高5 我用以下方法解决了这个问题: class SpeedLimit { public int CaughtSpeeding(int speed, bool isBirthday)

我是c#的初学者。所以我试图解决这个问题:

你开得有点太快了,一个警察拦住了你。编写代码计算结果,编码为int值:0=无票,1=小票,2=大票。如果速度小于等于60,则结果为0。如果速度介于61和80之间,则结果为1。如果速度大于等于81,则结果为2。除非是你的生日——在那天,你的速度在任何情况下都可以提高5

我用以下方法解决了这个问题:

class SpeedLimit
{
    public int CaughtSpeeding(int speed, bool isBirthday)
    {
        if (speed < 61 || (speed < 66 && isBirthday == true))
        {
            return 0;
        }

        else if (speed >= 61 && speed <= 80 && isBirthday == false)
        {
            return 1;
        }

        else if (speed >= 66 && speed <= 85 && isBirthday == true)
        {
            return 1;
        }
        else
            return 2;
    }
}
等级限速
{
公共车内超速(车内速度,布尔是生日)
{
如果(速度<61 | |(速度<66&&isbirth==真))
{
返回0;
}

否则,如果(速度>=61&&speed=66&&speed最快的胜利是在你的生日时将你的速度降低5分:

public int CaughtSpeeding(int speed, bool isBirthday)
{
    if (isBirthday) speed -= 5;
    /*Birthday fully considered*/

您可以预先计算一个变量的速度,该变量使用isbirth减去5。这使代码更简洁

class SpeedLimit
{
    public int CaughtSpeeding(int speed, bool isBirthday)
    {
        var measuredSpeed = isBirthday
                                ? speed - 5
                                : speed;

        if (measuredSpeed < 61)
        {
            return 0;
        }
        else if (measuredSpeed >= 61 &&
                 measuredSpeed <= 80)
        {
            return 1;
        }
        else
        {
            return 2;
        }
    }
}
等级限速
{
公共车内超速(车内速度,布尔是生日)
{
var measuredSpeed=IsBirth
?速度-5
:速度;
如果(测量速度<61)
{
返回0;
}
否则,如果(测量速度>=61&&

测量速度一点数学也有帮助。<代码> 60 和<代码> 80 是<代码> 20 >代码>,考虑偏移量为<代码> 40 >代码>,也因为您所说的包容性,我们考虑在计算中减去速度。因此,票价将以这种方式计算。
ticket = Min(Max(speed - 1 - 40, 0) / 20, 2);
考虑到生日的时间

public static int CaughtSpeeding(int speed, bool isBirthday)
{
    if(isBirthday) speed -= 5;
    return (int)Math.Min(Math.Max(speed - 1 - 40, 0)/20, 2);
}

如果您编写一个
SpeedIsInRange(startInclusive,endInclusive),您可能会更喜欢它
function。既然你已经有了一个有效的解决方案,这个问题适合你。@krillgar我很抱歉。我是这个论坛的新手,并且仍然熟悉规则和条例。所以有效的解决方案在这个社区没有范围?@adnantanvir正确。堆栈溢出是为“我有这段代码,但这发生的不正确。为什么?”代码审查是为了“我有这段代码,它做了我需要的一切,但我认为它可以结构得更好。请帮助!"正如你所看到的,在这些问题上,你会得到一些帮助,但是你会在代码审查上得到更详细的帮助。当这个算法正确运行时,<代码>速度> />代码将不再代表该人移动的速度。我认为这是结构上的误导。如果变量被重新使用,可能会导致问题。@要点。你可以创建一个新变量
有效的\u speed=isbirth?speed-5:speed;
。要求在所有情况下都要高出5英里,所以我希望看到+=5,为什么-=5?@derloopkat,因为你在测试相同的速度,就好像你要低5英里一样。这就消除了5英里的缓冲。
measuredX
通常意味着测量中未处理的X,而不是您已处理的X。