LoginSignup
question2022
@question2022 (step1engineer)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

JAVA 演算子 インクリメント ディクリメントの計算について

解決したいこと

Java Silver SE8 黒本 p.55(解答p.73)に記載の以下の問題についての質問です。

(問題文)
次のプログラムをコンパイル、実行したときの結果として正しいのは。
public class Main {
public static void main(String[] args){
int a = 10;
int b = a++ + a + a-- - a-- + ++a;
System.out.println(b);
}
}

(解答)
32が表示される

自分の理解の状況

a++
++a
など単体?では理解できているつもりなのですが、
int b = a++ + a + a-- - a-- + ++a;
このように式となったと途端理解ができず、
解説を読んでも理解できずにいます。
前置インクリメント、後置インクリメントも
それぞれの意味はなるほどとなりますが、
上記の式となると分からなくなってしまいます。

理解力がないのが原因なのですが、、
砕いて説明していただける方がいましたら
コメントをいただけますと幸いです。

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

0

2Answer

単体が理解できるなら、単体に分解してみてはいかがでしょう?

        int a = 10;
        int b = a++;
        b = b + a;
        b = b + a--;
        b = b - a--;
        b = b + ++a;
        System.out.println(b);
3

Comments

  1. @question2022

    Questioner
    はじめまして。
    ご回答いただき大変助かりました。
    こちらでいただいたヒントと、もう一方にいただいたヒントを照らし合わせながら
    今やっと理解することができました!!
    分解して計算する方法が分かりやすかったです。
    テストの際、思い出して解けるように練習を重ねてみます。
    ありがとうございました。

補足しますと、後置インクリメントのint a = 10; a = a++ + a;は次の項に移る前にインクリメントする代入が行われます。ので以下と同等です。

int a = 10;
a = 10 + 11;

なので単体作戦が使えます。

ちなみにJava Silver SE8ってこんなクソ文法が出てくるのか...と戦々恐々としました。知ってるかと思いますが、実務でしたら同じ変数のインクリメントが1つの式に2つ以上出ることはまず無いでしょう、安心してください。

1

Comments

  1. @question2022

    Questioner
    はじめまして。
    ご回答いただき大変助かりました。
    こちらでいただいたヒントと、もう一方にいただいたヒントを照らし合わせながら
    今やっと理解することができました!!
    実務の場合はこのような式はでてこないのですね。安心しました。。。。実務経験が少ないのでとりあえずJavaSilverに挑戦、取得できるように努めようと思います!
    ありがとうございました。

Your answer might help someone💌