通过一些帮助,我设法得到了这些问题的正确答案,但我想了解这些概念(即理解为什么这些代码是正确的),因为理解非常重要,不只是语法记忆。
第一个问题是你得到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;”部分结尾,我的代码显示不正确。为什么?正如问题所述,我赢得了其中一个奖项,换句话说,我不会空手而归。
提前致谢
答案 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;
}
这里会发生以下情况:
result
初始化为值0。result += [some number]
发生。这意味着result
被赋值(结果+ [某个数字])。result
。第二个回答:
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语句。当然,你被告知至少有一个是真的。然而编译器并不知道,所以它不会让你编译一个不能满足总是返回值的函数。