後置インクリメントの計算過程について
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が私の理解です。
よろしくお願いいたします。
No.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
あってますでしょうか?
No.2
- 回答日時:
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
No.1
- 回答日時:
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
は全て同じ結果になりませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sin曲線とcos曲線を描くプログ...
-
共有メモリについて
-
「配列定数は、イニシャライザ...
-
Javaで簡単なアニメーションを...
-
メインが含まれていません
-
【C#】フォームをなめらかに移動
-
JUnit4のアノテーションについて
-
Javaで画素
-
C++からC#のdllを参照する際、...
-
6桁の数字を重複なしでランダム...
-
java初心者ですが・・・
-
javaのRandomで『a~z』までの...
-
JAVAでCの関数ポインタのような...
-
Javaで電卓を作りたい
-
c# デリゲート関連の命名について
-
行の途中から読み込む方法
-
JavaScriptからJavaアプレット...
-
randomメゾットについて
-
androidアプリが強制終了してし...
-
System.err. printlnとSystem.o...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
JAVA エラー 式の開始が不正で...
-
式の型は配列型で int に解決済...
-
メインが含まれていません
-
javaでcsvファイル読込時の改行...
-
DataSet(DataTable)の使い方
-
java spring でエラーが出て困...
-
C++からC#のdllを参照する際、...
-
c# デリゲート関連の命名について
-
JUnit4のアノテーションについて
-
SwingでJtableのヘッダ行が表示...
-
Java エラーについて
-
6桁の数字を重複なしでランダム...
-
C#で実行時にメソッドの返り値...
-
JAVAでCの関数ポインタのような...
-
IN演算子の中身を動的に生成
-
行の途中から読み込む方法
-
javaでカレンダー作成
-
ビープ音をなめらかに鳴らしたい
-
初心者ですが、今javaで簡単な...
おすすめ情報