首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 變量值變化與 for 循環中 ++j 與 j+1 的區別:前綴自增 vs 後綴表達式

     編輯:程式設計疑難解答

代碼片段


for(int i=2,j=1; j<10; i=(i==9)?(((++j)/j)+1):(i+1)) {
    System.out.printf("%d*%d=%2d%c", i, j, i*j, (i==9?'\n':' '));
}

核心問題:`++j` vs `j+1`

表達式值副作用j 變化
`++j` (前綴自增)**遞增後的值** (如 j=1 → 表達式值 2)**修改變量 j 本身** (j 變為 2)✅ 永久改變
`j+1` (加法表達式)**j+1 的結果** (如 j=1 → 表達式值 2)**不修改 j** (j 仍為 1)❌ 不改變

循環執行流程推演


// 初始: i=2, j=1
// 條件: j<10 (1<10 true)
// 體: 輸出 2*1=2
// 迭代: i==9? false → i = i+1 = 3
// 下輪: i=3, j=1 ... 直到 i=9
// 當 i=9 時:
//   條件: j<10 (仍為 1<10 true)
//   體: 輸出 9*1=9
//   迭代: i==9? true → ((++j)/j)+1
//         ++j: j 從 1 變為 2, 表達式值 2
//         /j:  2 / 2 = 1
//         +1:  1 + 1 = 2
//   新 i = 2, j = 2 (關鍵:j 已永久變為 2!)
// 下輪: i=2, j=2 → 輸出 2*2=4 ... 直到 i=9
//   迭代: ++j → j=3, (3/3)+1=2, i=2
// 如此 j 遞增 1→2→3...9,循環結束

若改為 `j+1` 會發生什麼?


i = (i==9)? (((j+1)/j)+1) : (i+1);
// j 永遠是 1
// (1+1)/1 + 1 = 2/1 + 1 = 3
// i 變為 3, j 仍為 1
// 陷入死循環:i 在 2~9 循環,j 永不增長,條件 j<10 永真

總結

`++j` 修改變量本身,推動循環狀態前進;`j+1` 僅計算臨時值,不改變狀態。 此循環巧妙利用 `++j` 的副作用實現外層 `i` 重置與內層 `j` 遞增的雙重控制,生成九九乘法表。調試時在循環體首行打印 `i,j` 可直觀觀察變化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved