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ではありません。しかし、どのようにケース4 => a = 3

a=2 である必要があり、a=a++ のような置換を行っていないため、ケース 5 で「a」の更新があった場合 (これは正しくありません)、値をインクリメントする必要があります。

任意のヘルプをいただければ幸いです。

4

4 に答える 4

3

紙とペンを使ってこの演習を行うことをお勧めします。ともかく:

  1. i = 0 ==> f =1;
  2. 私は = 1 ==> a = 1; b = 1; (ケース 1 の後で壊れません!)
  3. i = 2 ==> b = 2;
  4. i = 3 ==> c = 1; = 2; b = 3;
  5. i = 4 ==> c = 2; = 3; b = 4;
  6. i = 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 に答える