都道府県穴埋めゲーム

後置インクリメントの計算過程について
Javaに関して初めての質問となります。よろしくお願いいたします。数日前に学習し始めたばかりの超・初心者です。
現在、基本的な演算について、インクリメント・デクリメントのそれぞれ前置と後置の違いを学習したところなのですが、どうも後置の理解が完璧でないようで、仮に変数をxとした場合、式内にxが二度出てくる場合の後置の計算が理解できません。

具体的には
int x, y;
x = 10;
y = x++ + x++;

上記でコンパイルした結果、y=21となる過程を教えていただけませんでしょうか。
私の理解では、x++は計算に使用した後にxに1を加算するので、まず
y = 10 + 10
で、y = 20 となり、その後にxに1を加算してx=11が私の理解です。

よろしくお願いいたします。

A 回答 (3件)

x = 10;


y = x++ + x++;
をきちんと処理すると
y = x++ + x++; →
y = 10 (この時点で x は 11) + x++; →
y = 10 + 11 (この時点で x は 12); →
y = 10 + 11 = 21
となります. この文のあと x は 12 です.
逆に
y = ++x + ++x;
だと
y = 11 (この時点で x は 11) + ++x; →
y = 11 + 12 (この時点で x は 12); →
y = 11 + 12 = 23
です. この場合でも x は 12 です.
と, しっかりおいかけるとその 4つのうち 2つ目は 3つ目と等しいけど 1つ目, 2つ目 (これは 3つ目と同じ), 4つ目は全て異なることもわかるはず.

この回答への補足

なるほど!

y = x++ + ++x + ++x
の場合は、
y=10 + ++x + ++x (この時点でx=11)
y=10 + 12 + ++x (この時点でx=12)
y=10+12+13 (この時点でx=13)
y=35

y = x++ + ++x + x++
の場合は、
y=10 + ++x + x++ (この時点でx=11)
y=10 + 12 + x++ (この時点でx=12)
y=10+12+12 (この時点でx=13)
y=34

y = x++ + x++ + ++x
の場合は、
y=10 + x++ + ++x (この時点でx=11)
y=10 + 11 + ++x (この時点でx=12)
y=10+11+13 (この時点でx=13)
y=34

y = x++ + x++ + x++
の場合は、
y=10 + ++x + ++x (この時点でx=11)
y=10 + 11 + ++x (この時点でx=12)
y=10+11+12 (この時点でx=13)
y=33

いずれの場合もx=13

あってますでしょうか?

補足日時:2009/12/23 02:46
    • good
    • 0

import java.lang.*;



public class Op {
public static void main(String argv[]) {
int x = 10 ;
int y = 0 ;
int i = 0 ;
for ( i = 0 ; i < 5 ; i++ ) {
System.out.println("x="+x+" y="+y);
y=x++ + x++ ;
}
}
}

x=10 y=0
x=12 y=21
x=14 y=25
x=16 y=29
x=18 y=33
    • good
    • 0

y = 10 + 11になります。



計算に使用したあと、ではなく計算途中でもインクリメントはされてます。

自分の場合、ソース上でxの値を認識したらインクリメントされてる、というふうに考えてます。

最初のxを「10」と認識した後にインクリメントされて、2番目のxは「11」となっているんだな、だから展開すると、y=10+11で答えは21になるんだなって感じです。

説明になってるかなぁ。

この回答への補足

早速のご回答ありがとうございます。
多分わかったと思います。。。

ちなみに
int x, y;
y = x++ + x++ + x++;
の場合は、y=10+11+12 で y=33

y = ++x + ++x + ++x;
の場合は、y=11+12+13 で y=36

あってますでしょうか?
もしこれが正しいとすると、2項目以降の変数xは前置でも後置でも同じ結果にならないでしょうか?
具体的には
y = x++ + ++x + ++x
y = x++ + ++x + x++
y = x++ + x++ + ++x
y = x++ + ++x + ++x
は全て同じ結果になりませんか?

補足日時:2009/12/23 01:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!