インクリメント・デクリメントとは
演算子であり、数値型の変数の値を1足したり1減らしたりできるもの
ただし、演算子 '++' '--' を変数の「どこに置くか」で加算減算のタイミングが異なってくる
要約すると上記の説明になりますが、それだけでは理解に繋がらないのでまずは問題を解いてみましょう。
public static void main(String[] args) {
int a = 10;
System.out.println(++a + a++ + a + a-- + --a);
}
どうでしょうか
すんなり解けた人はもう十分に知識があると思います。
少し悩んだ方は以下の解説を参考してください。
↓
↓
↓
56
もう一つ問題
public static void main(String[] args) {
int a = 10;
if (a++ > 10 && ++a < 10) {
System.out.println("条件が満たされた。aの値は" + a);
}
System.out.println("条件が満たされない。aの値は" + a);
}
↓
↓
↓
"条件が満たされない。aの値は12"//a = 12
javaを学習し始めの人であれば少し混乱するかもしれません。この問題はまず、条件判定式の理解ができていなとインクリメントデクリメントの判断まで行き着く事ができません。
解説
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
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 をする