質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

3071閲覧

Java問題集 インクリメント演算子 デクリメント演算子 疑問点

bonobiya

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/04/29 12:51

Javaの問題集をやっていて、インクリメント&デクリメント演算子についての問題の解答および解説について疑問点があったので、質問させていただきます。

問題は
「下記のコードをコンパイルおよび実行するとどのような結果になりますか。」
という問題で、答えは
x:5 y:6
でした。

Java

1class DecrementTest { 2 public static void main(String args[]) { 3 int a = 5; 4 int b = 6; 5 6 int x = --a; 7 int y = b--; 8 9 x = y--; 10 y = x--; 11 12 System.out.println("x: " + x + " y: " + y); 13 } 14}

しかし、
int x = --a;
でxの値が4になった後で
y = x--;
となっている箇所でyの値が4になると思うのですが、なぜy:6と出力されるのでしょうか?

問題集の解説には「10行目(y = x--;)では、変数yに変数xの値を代入してから変数xの値をデクリメントするため、10行目の処理が終了した時点で変数xは5、変数yは6を保持します。」と書いてあったのですが、『変数yに変数xの値を代入してから変数xの値をデクリメントする』前にxの値は4だと思うのですが、いかがでしょうか?

どなたかご解説をいただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

こちらのページを参考に、インクリメント、デクリメントの処理を単純な処理に書き直して机上で計算してみますと、解答のとおりになりました。
xの値は、最終行の前の段階で6になっています。

個人的にも、へぇそんな動きになるんだと思いました。
インクリメント、デクリメントは難しいですね。

以下、書き直した処理です。

Java

1class DecrementTest { 2 public static void main(String args[]) { 3 int a = 5; 4 int b = 6; 5 6 //int x = --a; 7 a = a - 1; // a = 4 8 int x = a; // x = 4 9 10 //int y = b--; 11 int y = b; // y = 6 12 b = b - 1; // b = 5 13 14 //x = y--; 15 x = y; // x = 6 16 y = y - 1; // y = 5 17 18 //y = x--; 19 y = x; // y = 6 20 x = x - 1; // x = 5 21 22 System.out.println("x: " + x + " y: " + y); 23 } 24}

投稿2017/04/29 13:28

編集2017/04/29 13:31
akabee

総合スコア1947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bonobiya

2017/04/30 12:19

回答ありがとうございました。
guest

0

ベストアンサー

y = x--の直前の、x = y--を見落としていないでしょうか。
確かに、int x = --aの瞬間はx=4となりますが、その後のx = y--でxの値は更新されています。

java

1 int a = 5; 2 int b = 6; 3 4 int x = --a; // まずaがデクリメントされてから代入されるので、x = 4, a = 4となります。 5 int y = b--; // まずbが代入されてからデクリメントされるので、y = 6, b = 5となります。 6 7 x = y--; // まずy(=6)がxに代入されてからyがデクリメントされるので、x = 6, y = 5となります。 8 y = x--; // まずx(=6)がyに代入されてからxがデクリメントされるので、x = 5, y = 6となります。

投稿2017/04/29 13:42

philomagi

総合スコア267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bonobiya

2017/04/30 12:18

わかりやすい回答ありがとうございました。
guest

0

見間違いですね。y = x--; ではありません。y = b--; となっています。

投稿2017/04/29 22:52

編集2017/04/29 23:14
Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こういうのはコンピュータに聞くのがいいですね。

java

1 2class DecrementTest { 3 public static void main(String args[]) { 4 int a = 5; 5 int b = 6; 6System.out.println("x: " + x + " y: " + y); 追加 7 int x = --a; 8 int y = b--; 9System.out.println("x: " + x + " y: " + y); 追加 10 x = y--; 11 y = x--; 12 13 System.out.println("x: " + x + " y: " + y); 14 } 15} 16 17

投稿2017/04/29 12:59

maiko0318

総合スコア876

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2017/04/29 13:13

1つ目はxやyの宣言前になっていますが、それって大丈夫でした?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問