0

我发现了一个有趣的编程问题:

执行此程序后 a,b,c,f 的值是多少?

int i=0,a=0,b=0,c=0,f=0;
while(i<=5){
switch(i++){
    case 1:++a;
    case 2:++b;
    break;
    case 3:
    case 4:++c;a++;b++;
    break;
    default:++f;
}
}

我以为价值观

a=2 , b=2 , c=2 和 f=2 但是

当我执行这个程序时,我得到 a = 3、b = 4、c = 2 和 f = 2。

我明白 c 和 f 是如何得到它的值 2 的,但是 a=3 和 b=4 是怎么来的。

(根据语法 ++a 和 a++ 不同,因为 ++a 更新值然后使用它,而 a++ 使用值然后更新它)

谁能解释 a 和 b 如何将其值设为 3 和 4。

更新:

嘿,我的疑问是:在 i++ 中,初始值为 0 而不是 1。但是 case 4 => a=3

它应该是 a=2 并且如果在案例 5 中有任何“a”更新(这是不正确的),则应该增加该值,因为我没有像 a=a++ 这样进行任何替换。

任何帮助表示赞赏。

4

4 回答 4

3

我建议你用纸和笔来做这个练习。反正:

  1. i = 0 ==> f =1;
  2. i = 1 ==> a = 1; b = 1; (在案例 1 之后没有中断!)
  3. i = 2 ==> b = 2;
  4. i = 3 ==> c = 1; a = 2; b = 3;
  5. i = 4 ==> c = 2; a = 3; b = 4;
  6. 我 = 5 ==> f = 2;
于 2012-08-21T13:01:57.037 回答
2

希望对你有帮助...

When i is 0 
    None of the case matched and went to default
    so a=0,b=0,c=0,f=1;

When i is 1 
    Case 1 and 2 will execute as there is no break after 1;
    so a=1,b=1,c=0,f=1;

When i is 2 
    Case 2 will execute
    so a=1,b=2,c=0,f=1; 

When i is 3 
    Case 3 and 4 will execute as there is no break after 3;
    so a=2,b=3,c=1,f=1; 

When i is 4 
    Case 4 will execute
    so a=3,b=4,c=2,f=1; 

When i is 5 
    Default will execute
    so a=3,b=4,c=2,f=2;
于 2012-08-21T13:03:11.647 回答
1

请记住,switch 语句支持“失败”——对于 i=2,只有 b 递增,但对于 i=1,两者都递增。

于 2012-08-21T13:00:30.470 回答
0

前一个和后增量( ++a 和 a++ )在这个先前的答案中得到了最好的解释

更新 正如下面评论中所指出的,这些概念的 C++ 和 Java 实现存在根本差异。但这里是java中的一个简单例子

        x = 1;
        y = ++x;  Here y = 2 and x =2 because we first increment x and assign it to y

        x = 1;
        y = x++;  But here y = 1 and x = 2 because we first assign x to y and then increment x

in essense , y = x++ is equivalent to those 2 statements
            y =x;
            x = x + 1;
于 2012-08-21T13:02:32.273 回答