程序流程 - 布尔值c#

时间:2017-07-10 09:14:43

标签: c# if-statement boolean

通过一些帮助,我设法得到了这些问题的正确答案,但我想了解这些概念(即理解为什么这些代码是正确的),因为理解非常重要,不只是语法记忆。

第一个问题是你得到3场比赛的结果(真=胜利),第一场比赛的奖金是1,第二场是2,第三场是3.回报总奖金额(你可以赢任何奖品组合)

答案是:

 public static int GetTotalPrize(bool first, bool second, bool third)
    {
        var result = 0;

        if (first)
        { result += 1; }

        if (second)
        { result += 2; }

        if (third)
        { result += 3; }

        return result;
    }

该计划如何知道如果你赢了,让我们说,第一,第二和第三个奖项,总数是6?或者如果你赢得第一和第三,总数是4?换句话说,上面的代码如何解释所有可能的组合?

第二个问题是你获得了3场比赛的结果,其中一项是你赢过的(真实=胜利)。第一个奖项是1,第二个是2,第三个是3.返还奖金金额。

我的回答是:

public static int GetPrize(bool first, bool second, bool third) 
{ 
if (first) 
    return 1; 

if (second) 
    return 2; 

if (third) 
    return 3; 

return 0; 
}

没有“返回0;”部分结尾,我的代码显示不正确。为什么?正如问题所述,我赢得了其中一个奖项,换句话说,我不会空手而归。

提前致谢

2 个答案:

答案 0 :(得分:1)

第一段代码的工作原理如下(读作伪代码)

定义一个名为result的数字 将其值设置为0

if参数(first)等于true,将1添加到result

[对(second)(third)再次执行此操作,但使用各自的数值]

返回result

它只计算得分,然后返回。

问题的第二部分:

您将方法定义为保证返回int。因此,如果不遵守该保证,您就无法编写该方法。你不能返回 NOTHING (void),否则编译器会抱怨。

您也无法返回null,因为int不可为空。

如果我们采用了你的第二个问题的逻辑,并被告知能够接受任何次数的轮次,那么最后return语句的原因可能会变得更加明显:

    public static int GetPrize(params bool[] scores)
    {
        for (int i = 0; i < scores.Length; i++)
        {
            if (scores[i]) // there is no guarantee any of the bools passed along equals true, so we might never hit this return statement.
                return i + 1;
        }

        //if we never hit the first return statment, 
        //we will end up here, and will not have won anything.
        //we still need to return an int, though.
        return 0;
    }

答案 1 :(得分:1)

好吧,让我们一步一步来。

第一个回答:

public static int GetTotalPrize(bool first, bool second, bool third)
{
    var result = 0;

    if (first)
    { result += 1; }

    if (second)
    { result += 2; }

    if (third)
    { result += 3; }

    return result;
}

这里会发生以下情况:

  1. 变量result初始化为值0。
  2. 以下是一系列if语句。注意它们是否只是if-else,这意味着它们不是互斥的。
    • 如果if语句为true,则result += [some number]发生。这意味着result被赋值(结果+ [某个数字])。
  3. 最后,返回result
  4. 第二个回答:

    public static int GetPrize(bool first, bool second, bool third) 
    { 
        if (first) 
            return 1; 
    
        if (second) 
            return 2; 
    
        if (third) 
            return 3; 
    
        return 0; 
    }
    

    在这里你被告知你肯定赢了其中一个。如果你没有赢得第一个,那么你可以赢得第二个或第三个。如果你还没有赢得第二名,那么你必须赢得第三名。所以正确的代码是:

    if (first)
        return 1;
    else if (second)
        return 2;
    else
        return 3;
    

    在这种情况下,if语句 是互斥的,因为你被告知你已经赢得了一个。与第一个答案不同,此语法保证将返回其中一个值(1,2或3)。

    返回保证很重要,因为您已将函数定义为具有返回类型int。这意味着,无论代码中发生什么,它都始终返回int。在您的代码中,如果它不是return 0,那么如果所有if都是false,则不会有return语句。当然,你被告知至少有一个是真的。然而编译器并不知道,所以它不会让你编译一个不能满足总是返回值的函数。