変数 a があるとして、a++ は a = a + 1 とは厳密には違うようです。(意味は同じだが)
まず ++演算子には 後置型と前置型があるようです。a++ と ++a ですね。
で、この後置型 ( a++ ) は 「処理をした後にインクリメントをする」ようです。
System.out.print(i++); であれば、まず iの値を出力してから +1 するようです。
とりあえず、コードを読んでみましょう。
サンプルとして後者の i++ をしている方を見ましょうか。
public class Main {
public static void main(String[] args) {
// 変数iの初期値: 0, iが3未満の間, i++しながらループ
for (int i=0;i<3;i++) {
// i++の値を出力
System.out.print(i++);
}
}
}
となっていますが、「i++の値を出力」は「iの値を出力」と「i++する」の二つに分けられるので、
[疑似コード]
1. 変数iの初期値: 0, iが3未満の間, i++しながらループ
1.1. iの値を出力
1.2. i = i + 1
となりますね。
この疑似コードを現実世界でシミュレーションしてみてください。
まず (1) で i = 0 になる。(初期値なので)
そして(1.1)によって 0 が出力される (i=0なので)
(1.2)によって、i + 1 = 0 + 1 = 1、つまり i = 1 となる。
さらに(1)に戻ります。
条件( i < 3 ) は満たしますか? 1 < 3 なので処理する。
ただし、(int i=0;i<3;i++) の i++ の部分で i + 1 = 1 + 1 = 2 となり、i = 2 となる。
(1.1) で 2が出力される。( i = 2 なので )
(1.2) で i + 1 = 2 + 1 = 3 となる。で、そのまま (1)に。
しかし、(1)では i = 3となっていて、3 < 3 を満たさないので処理せずに終了。
つまり、「02」と表示されるのです。
おそらく、++i とすれば、「13」となるはずです。
同じように考えてみましょう。
前置型は +1 してから渡す ので、System.out.print( ++i ); は、
i + 1 してからその値が printメソッドに渡されるはずです。
よって、疑似コードだと、
[疑似コード]
1. 変数iの初期値: 0, iが3未満の間, i++しながらループ
1.1. i = i + 1
1.2. iの値を出力
となりますね。
i = 0 -> i + 1 = 1 -> (「1」が出力される)
-> i = 1 -> i + 1 = 2 -> i + 1 = 3 -> (「3」が出力される)
ですね。
2021/09/16 12:01