LoginSignup
1
1

More than 1 year has passed since last update.

【インクリメント・デクリメント】java

Last updated at Posted at 2022-12-02

インクリメント・デクリメントとは

演算子であり、数値型の変数の値を1足したり1減らしたりできるもの

ただし、演算子 '++' '--' を変数の「どこに置くか」で加算減算のタイミングが異なってくる

要約すると上記の説明になりますが、それだけでは理解に繋がらないのでまずは問題を解いてみましょう。

例題1
public static void main(String[] args) {
		int a = 10;
		System.out.println(++a + a++ + a + a-- + --a);
}

どうでしょうか

すんなり解けた人はもう十分に知識があると思います。

少し悩んだ方は以下の解説を参考してください。



解答1
56

もう一つ問題

例題2
public static void main(String[] args) {
		int a = 10;
		if (a++ > 10 && ++a < 10) {
			System.out.println("条件が満たされた。aの値は" + a);
		}
		System.out.println("条件が満たされない。aの値は" + a);
}




  

解答2
"条件が満たされない。aの値は12"//a = 12

javaを学習し始めの人であれば少し混乱するかもしれません。この問題はまず、条件判定式の理解ができていなとインクリメントデクリメントの判断まで行き着く事ができません。

解説

解答1について解説
public static void main(String[] args) {
		int a = 10;
		System.out.println(++a + a++ + a + a-- + --a);
             // aの動き ⇨     11 + 11 + 12 + 12 + 10
}

変数の前にインクリメントがある場合は:先に足され計算されます 
  a = 10 ⇨ a = 10 + 1(こっちが採用)
変数の後にインクリメントがある場合は:後に足され計算されます 
  a = 10(こっちが採用) ⇨ a = 10 + 1
変数の前にデクリメントがある場合は:先に足され計算されます 
  a = 10 ⇨ a = 10 - 1(こっちが採用)
変数の前にデクリメントがある場合は:先に足され計算されます 
  a = 10(こっちが採用)⇨ a = 10 - 1

解答2について解説
	if (a++ > 10 && ++a < 10)

この問題に関してはポイントが2つあり。
➀'&&'で繋がれている二つの条件判定式の理解
➁インクリメントデクリメントの理解

&&で結ばれる場合true&&true出ないと{}の部分は処理されない。
そして、1つ目の条件式でfalseだった場合は2つ目の条件式が判定がされない。
例で言えば a++ > 10 は判定され falseになるが ++a < 10 は判定されることもなくなってしまう。

左の条件式 : false 
右の条件式 : true(判定されない)

左の条件式 a++ は判定されるのでaに+1加算されます。ただ条件判定をする際はa = 10であることに注意が必要です。a++は変数の後にインクリメントを置いています。ですので条件判定をされる時はa = 10 での判定がされるのです。
--結果--
条件判定時はa = 10 で判定される
判定の後の行からはa = 11 の値になっている

最後に簡単な動きを確認してみる。

簡単な動き確認
    int a = 10;
    boolean bool = (a++ = 10)
    System.out.println(bool);//true
    int b = 10;
    System.out.println(++b + --b);//21と出力される
    System.out.println(b);//10と出力される

インクリメントデクリメントはjavaを習い始めてすぐ出てくる一見簡単なものだと思いがちだが、しっかりとした理解をしていないと判定がされなかったり、思った出力と違うことがあってしまう。基礎を固めることを意識しながらこれからも学習していきたいです。
  

追記
インクリメント・デクリメント
++とは
int a = 10;
++a;
//a = a + 1;

//演算子の一種
a += 1;//+= -= *= /=

int b = 10;
if (++b == 10) {
    System.out.println("true");
} else {
    System.out.println("false");
}
//結果はfalse
int c = 10;
if (c++ == 10) {
    System.out.println("true");
} else {
    System.out.println("false");
}
//結果はtrue   c = 11


++a
//先に + 1 をする
a++
//後に + 1 をする
--a
//先に - 1 をする
a--
//後に - 1 をする
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1