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

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

ただいまの
回答率

88.91%

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

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 1,913

bonobiya

score 15

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

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

class DecrementTest {
    public static void main(String args[]) {
        int a = 5;
        int b = 6;

        int x = --a;
        int y = b--;

        x = y--;
        y = x--;

        System.out.println("x: " + x + " y: " + y);
    }
}

しかし、
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だと思うのですが、いかがでしょうか?

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+4

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

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

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

class DecrementTest {
    public static void main(String args[]) {
        int a = 5;
        int b = 6;

        //int x = --a;
        a = a - 1; // a = 4
        int x = a; // x = 4

        //int y = b--;
        int y = b; // y = 6
        b = b - 1; // b = 5

        //x = y--;
        x = y;  // x = 6
        y = y - 1;  // y = 5

        //y = x--;
        y = x; // y = 6
        x = x - 1; // x = 5

        System.out.println("x: " + x + " y: " + y);
    }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/30 21:19

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

    キャンセル

checkベストアンサー

+2

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

        int a = 5;
        int b = 6;

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/30 21:18

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

    キャンセル

0

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-1

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

class DecrementTest {
    public static void main(String args[]) {
        int a = 5;
        int b = 6;
System.out.println("x: " + x + " y: " + y);    追加
        int x = --a;
        int y = b--;
System.out.println("x: " + x + " y: " + y);  追加
        x = y--;
        y = x--;

        System.out.println("x: " + x + " y: " + y);
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/29 22:13

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

    キャンセル

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

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る