最近我发现像这样使用 st 的风险:
int i = 10;
int sum = 0;
while ( i-- ){
sum = sum + i;
它实际上得到 sum = 9 + 8 + 7 + .. + 1。所以它总共缺少 10。但我更喜欢这种编码方式,它既快速又专业。有什么建议可以防止风险并且仍然有简洁的代码吗?
最近我发现像这样使用 st 的风险:
int i = 10;
int sum = 0;
while ( i-- ){
sum = sum + i;
它实际上得到 sum = 9 + 8 + 7 + .. + 1。所以它总共缺少 10。但我更喜欢这种编码方式,它既快速又专业。有什么建议可以防止风险并且仍然有简洁的代码吗?
你有一个计数器,一个停止条件和一个递减操作,所以使用一个for
循环 - 它比while
:
int sum = 0;
for (int i = 10; i > 0; --i) {
sum += i;
}
“专业”,简洁无风险:)
编辑:或者如果你想非常简洁:
int sum = 55;
至少对于这种特定类型的系列(总和来自 1..N),您只需执行N*(N+1)/2
. 10*11/2 = 55。
后缀递增/递减可能非常讨厌。我建议不要使用它。你的例子甚至不是最糟糕的。它表现得很好:你实际上得到 sum = 9+8+7+...+1+0; 所以你会像人们想象的那样经历循环 10 次。
如评论中所述,使用 for 循环。
int sum=0;
for (int i=10;i;--i) sum+=i;
前缀运算符更容易混淆,并且在某些情况下,可以更快地编写代码。
使用 do-while 而不是 while。
不知道您所说的“风险”和“专业”编码方式是什么意思,这段代码是错误的。如果你想让它看起来和你写的“相似”
int i = 10;
int sum = i;
while ( i-- ){
sum = sum + i;
或者
int i = 10;
int sum = 0;
do {
sum += i;
} while (--i);