我试图逐行找出此C ++代码。 谁能为我解释一下?为什么输出为1?
int main() {
int sum = 0;
for (int i=0; i<10; i++)
if (sum%2==0)
sum += i;
else
continue;
cout << sum << endl;
}
答案 0 :(得分:2)
该代码可以粗略地翻译成英文:
从零开始求和,然后,对于且仅当当前和为偶数时,才将0到9之间的每个数字加到总和中。
因此,您将总和加零(因为当前总和为偶数),之后总和仍为零(因此为偶数)。
然后,您将一个加到总和(因为当前总和是偶数),之后总和将为一(因此为奇数)。
然后,您将永远不会再添加任何东西(因为它很奇怪,并且会保持不变,因为您没有添加任何东西)。
这就是为什么要输出一个。
您可能会发现,简单地修改程序以输出其“思维”内容更具指导意义。以下更改有望使它更容易理解:
#include <iostream>
using namespace std;
int main(void) {
int sum = 0;
for (int i = 0; i < 10; i++) {
cout << "Processing " << i
<< ", sum is " << sum
<< ((sum % 2 == 0) ? " (even):" : " (odd): ");
if (sum % 2 == 0) {
sum += i;
cout << "adding " << i << " to get " << sum;
} else {
cout << "leaving at " << sum;
}
cout << '\n';
}
cout << "Final value is " << sum << '\n';
}
运行该代码将向您显示过程中的步骤:
Processing 0, sum is 0 (even): adding 0 to get 0
Processing 1, sum is 0 (even): adding 1 to get 1
Processing 2, sum is 1 (odd): leaving at 1
Processing 3, sum is 1 (odd): leaving at 1
Processing 4, sum is 1 (odd): leaving at 1
Processing 5, sum is 1 (odd): leaving at 1
Processing 6, sum is 1 (odd): leaving at 1
Processing 7, sum is 1 (odd): leaving at 1
Processing 8, sum is 1 (odd): leaving at 1
Processing 9, sum is 1 (odd): leaving at 1
Final value is 1
答案 1 :(得分:0)
我创建了一个表,试图模拟调试步骤,以便您了解代码的逻辑并查看为什么将结果评估为1
推荐:学习如何调试。根据您使用的IDE,它们使用不同的方法调试代码。当您想了解代码的执行方式时,调试会派上用场。
关于您的代码:
尝试在可能的情况下使用花括号,这可以帮助您的代码更简洁,更易懂;
否则,继续:您不需要此行代码,因为在其他条件之后循环中无可跳过;
答案 2 :(得分:0)
交换比较结果
observable
到
@RequestMapping(value = "/authenticate", method = RequestMethod.POST)
@ResponseBody
public AuthenticateDto dashboard(@RequestParam("userName") String username,@RequestParam("pwd") String pwd) throws IOException
{
return new AuthenticateDto(service.authenticate(username,pwd));
}
会很有意义。 这将得出偶数0 + 2 + 4 + 6 + 8-> 20 。