
こんにちは、Java初心者です。どなたか質問タイトルの件で教えていただけませんでしょうか。
Javaのテキストで下のようなものがあったのですが、違いがテキストの説明ではよくわかりませんでした。この場合はどう違うのですか?初心者向けに、参照、演算の詳細なタイミングを一つ一つ教えていただけないでしょうか?前置の方が2になるのはなんとなくわかりそうなのですが、後置はさっぱりなのです。。。
int x, a=1;
x=++a; ⇒xの値は2
int x, a=1,
x=a++1; ⇒xの値は1のまま
また、実例としてはどんな場合に前置又は後置を使うのですか?
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
単行で使う場合、前置と後置に違いはありません。
例.
++x;
y++;
この場合、行っていることはどちらも同じです。
前置と後置の違いを簡単に書けば「値を変化させるタイミングが違う」ということです。挙げられた式「x = ++a;」と「x = a++;」という式は、以下のように書き換えることができます。
x = ++a;
↓
x = (a + 1);
x = a++;
↓
(x = a) + 1;
つまり、インクリメントを行うタイミングが異なることになります。前置の場合は式(ないしメソッド)の評価を行う前にインクリメントを行い、後置の場合は逆に式(ないしメソッド)の評価を行った後インクリメントを行うことになります。
当然、デクリメントでも同じ結果になります。
実例……。うーん。インクリメントの評価タイミングを意識しておけば、全く同じ内容のプログラムでも前置と後置両方で組めるので、最終的には個人の好みになってしまうような……。
for文中で使うのはひとつの例になるのかな。
蛇足ですが、条件式内にインクリメントを組み込むこともできます。そのとき、前置と後置を意識して書かなければ、思わぬバグに遭遇することもありますからご注意ください。
複数条件式をショートサーキット(&&とか||とか)でくくるとその辺のバグに出会いやすいかも。
回答下さいましてありがとうございます。
x=(a+1)
(x=a)+1
と考えればいいんですね。一人で難しく考えすぎてしまっていました。おかげですっきりしました。確かにfor文中でよく見かけますね。まだ初めて2日なんですが色々理解できるように頑張ってきます。
ありがとうございました!
No.3
- 回答日時:
式を分けて書くと
x=++a;
↓
a=a+1;
x=a;
x=a++;
↓
x=a:
a=a+1;
こんな感じ
++a は先にaをインクリメント
a++ は後でaをインクリメント
実例としては、x=a++; や x=++a;のような
使い方はプログラムの可読性が悪くなるので
初心者は、基本使わない
a++; x=a; や x=a; a++; の様に分けて書く
無理して1行にする必要は無いでしょう
ただ、他の人のプログラムで使われている
可能性があるので、知識として知っておく必要はある
という程度のものと理解しておけば良いかと
回答ありがとうございます。
そうなんですか、2つに分けて考えて書く方法もあるんですね!まずは読めるようになることなのでしっかり理解しておかないとですね。
ありがとうございました!
No.2
- 回答日時:
1)
int x, a=1;
x=++a; → a=a+1演算後にxにaの値を代入する(この場合xには2が代入される)
実行後
x=2
a=2
2)
int x, a=1,
x=a++; → xにaの値を代入後a=a+1を演算する(この場合xには1が代入される)
実行後
x=1
a=2
となります。
使い方はケースバイケース。
このへんの話は最も基礎的な部分ですので初心者向けサイトを見たほうがより正確な答えが得られるかと思います。
インクリメント/デクリメント演算子
http://msugai.fc2web.com/java/ope.html
回答下さいましてありがとうございます。
そうですね、教えていただいたサイトと合わせて勉強させていただきます。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- 物理学 天体に自由落下する。 1 2023/06/01 21:21
- 数学 「f(z)=1/(z^2-1)に関して ローラン展開を使う場合、マクローリン展開を使う場合、テイラー 3 2022/08/27 19:56
- 英語 「this is the/my first time~」の文法上の制約について 1 2023/04/06 09:48
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- 物理学 この波動関数の複素共役はなんですか? 2 2022/08/17 00:32
- 英語 「名詞+形容詞/現在分詞/過去分詞+to不定詞の副詞的用法」の語順について 7 2022/09/22 05:27
- C言語・C++・C# C言語 3 2022/10/04 15:07
- TOEFL・TOEIC・英語検定 account は本当に自動詞なんですか? 3 2022/05/16 10:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
初心者によるプログラム
-
VB6.0 DataGridでのfirstRowの...
-
jsp~jspにhiddenを使って変数...
-
整数xxxが大き過ぎますというエ...
-
DataTableの値を変数に代入したい
-
Excel VBAでイコール二回使えま...
-
DataColumn型の使用方法
-
【Excelマクロ】グラフの最小値...
-
JavaScriptをURLから直接実行し...
-
【VBA】複合代入演算子
-
テキストエディタ作成で「元に...
-
gridViewの行選択解除
-
Excel-vba 文字列と変数を...
-
定数のメリットとは?
-
VBAの定数の使い方で、計算値を...
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
VBAで配列のNULL判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
EXCEL/VBA 変数の値をクリップ...
-
jsp~jspにhiddenを使って変数...
-
整数xxxが大き過ぎますというエ...
-
C言語 アロー演算子について質...
-
[VBS]変数を定数に変換する方法...
-
Variant型で宣言してるのにEmpt...
-
テキストボックスの値を変数に...
-
processing エラーで、 "cannot...
-
Accessコンボボックスにレコー...
-
DataTableの値を変数に代入したい
-
条件演算子 ? :
-
インクリメント演算子の前置(+...
-
プログラミングで変数と関数の...
-
gridViewの行選択解除
-
無名関数のメリットがよくわか...
-
stdpicture型の変数に、、
-
論理演算子について
-
COBOLの変数
おすすめ情報