はじめに
もう一度おさらいするという意味でインクリメント演算子とデクリメント演算子を一緒に使ってみた。
「プログラムは上から処理されていく」というルールも、ここでもう一度確認していく。
インクリメントとデクリメント演算子のおさらい
それぞれの演算子について軽くおさらいする。
インクリメント演算子
インクリメント演算子は「++」。
ある数字(仮にAとする)に「1」を加えた数字が新たなAの数字となる。
インクリメント演算子については以下参照。
基本の演算子-インクリメント Javaプログラミング初心者の記録Vol.14
デクリメント演算子
デクリメント演算子は「—」。
ある数字(仮にBとする)から「1」を引いた数字が新たなBの数字となる。
デクリメント演算子については以下参照。
演算子-デクリメント演算子 Javaプログラミング初心者の記録vol.15
インクリメントとデクリメント演算子を使ってみる
インクリメントとデクリメント演算子を一緒のクラス内で使ってみた単純なものだが、とりあえず見てみる。
※黄色の部分はパッケージ、クラス、メインメソッドと呼ばれるもの。
設定方法についてはEclipseの立ち上げと設定準備 プログラミング初心者の記録vol.2を参照。
クラスとメソッドについては下記も見てみて。
Javaプログラミングのクラスとメソッドの説明が初心者には分かりづらい件
package firstday.java; ※「firstday.java」がパッケージ名
public class incrementDecriment { ※「incrementDecriment」がクラス名
public static void main(String[] args) { ※メインメソッドと呼ばれるもの
int A=35;
A ++;・・・・・・・・・・・・・・・・・・・1
System.out.println(A);
A–;・・・・・・・・・・・・・・・・・・・2
System.out.println(A);
A–;・・・・・・・・・・・・・・・・・・・3
System.out.println(A);
A++;・・・・・・・・・・・・・・・・・・・4
A++;・・・・・・・・・・・・・・・・・・・5
System.out.println(A);
}
}
※「・・・・・・1」などは式の数が分かりやすいように数字を打っただけだから実際プログラムとしては入力しない。
入力するのは色を付けた部分だけー。
これを実行すると下のようになる。
36
35
34
36
上から見ていこう。
int A=35;となっているからまず「A」には「35」が入る。
ではまず一つ目。
使われているのは「++」だから、インクリメント演算子。
A++:は元々のAの値に「1」を足したものが新たな「A」の値となるということ。
35に1を足したら「36」。
次の行に「System.out.println(A);」とあるから、この時点での「A」の値が画面に表示される。
従って「36」が画面に表示されたということ。
続いて2つ目。
使われているのは「–」だから、デクリメント演算子。
A–:は元々のAの値から「1」を引いたものが新たな「A」の値となるということ。
ここで注意点が…!
元々のAは「35」だから35から1を引いて「34」が答えと思うかも。
ここでポイントとなるのが「プログラムは上から処理されていく」ということ。
覚えてた?
前の計算式「A++;」でAの値は「36」と出た。
よってここでは「Aは36」という数値が引き継がれている。
そのため「A–;」となっているここの式では「36」から「1」を引くのだ…!
この結果、「35」となる。
「A–;」の次の行に「System.out.println(A);」とあるから、この時点での「A」の値が画面に表示される。
従って「35」が画面に表示されたということ。
次の計算式でAを使う場合は、ここで計算した「35」が引き継がれるということ。
次は3つ目。
もう一度「A–;」とある。
計算方法は前の式と同じ。
「Aは35」という結果が引き継がれていて、「–」とデクリメント演算子が使われている。
これは「35から1を引いた数が新たなAの値」ということ。
計算すると「34」。
「A–;」の次の行に「System.out.println(A);」とあるから、この時点での「A」の値が画面に表示される。
従って「34」が画面に表示されたということ。
前の式と同じだから簡単よ。
最後は「A++;」が2つ続いて「System.out.println(A);」とある。
「System.out.println(A);」自体は、「画面に表示してー」という指示というだけ。
この表記がなくても内部で計算されている。
どういうことかというと…。
まず一つ目の「A++;」を計算する。
前の式のAの結果を引き継ぐから「34+1」という計算になる。
その結果、「Aは35」ということになる。
この次に2つ目の「A++;」があるからこれを計算する。
前の式(すぐ上の「A++;」)のAの結果は「35」だから、「35+1」という計算。
これを計算すると「Aは36」となる。
この2つ目の「A++;」の次の行に「System.out.println(A);」があることから画面にはこの時点でのAの結果が表示される。
この時点でのAの結果(すぐ上のAの式の結果)は「36」だから画面には「36」が表示される。
式と式の間に「System.out.println(A);」がなくても、ちゃんと結果は次の行に引き継がれて計算されている。
間のを無くすと最後の結果のみが画面に表示されるということ。
int A=35;
A ++; ここで「36」
A–; ここで「35」
A–; ここで「34」
A++; ここで「35」
A++; ここで「36」
System.out.println(A);
実行すると最後の行のAの結果を参照して「36」が表示される。
式が5つあっても「System.out.println(A);」が1つだけなら表示される結果は1つ。
※もし「System.out.println(A);」が上から3つ目の式「A–;」と4つ目の「A++;」の間にあったら、表示されるのは「34」。
あくまでも「System.out.println(A);」はその時点での結果を表示するもので、最終的な結果を表示するものではない(System.out.println(A);より前に書かれた式を参照する)。
プログラムは上から処理されるというのが理解できたと思う。
プログラムは上から処理されるというのはインクリメントとデクリメント演算子だけでなく、すべてのプログラムにあてはまる。
だからプログラムを書く順番には注意しないといけない。
まとめ
インクリメントとデクリメント演算子を使ってみたけれど、算術演算子(+、-、*、/、%)や代入演算子(+=、-=など)を使うこともできる。
その場合も同様に、プログラムは上から順番に処理されていくというのがちゃんと理解できた。
プログラムを書くにはその順番が重要だから気を付けないと…。
では今回はここまでということで。
次も演算子についての予定だけど、今まで書くだけでしっかりとまとめていなかった「演算子の優先度」について簡単にまとめたいと思う。
コメント