首頁
編程語言
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` (前綴自增):
    1. 將 `j` 的值**加 1** (副作用,永久修改變量)。
    2. 表達式的值為**新值**。
    例:`j=1` → `++j` 使 `j` 變為 `2`,表達式值為 `2`。
  • `j+1` (加法表達式):
    1. 計算 `j+1` 的結果。
    2. **不修改** 變量 `j` 本身。
    例:`j=1` → `j+1` 值為 `2`,但 `j` 仍為 `1`。

對循環的影響


// 使用 ++j (原代碼)
((++j)/j)+1
// j=1 時:++j → j=2, 值=2 → 2/2+1 = 2 → i=2, j=2 (狀態推進)
// 下輪 j=2 → ++j → j=3, 值=3 → 3/3+1 = 2 → i=2, j=3
// ... j 遞增至 9,循環結束

// 若改為 j+1
((j+1)/j)+1
// j 永遠是 1
// (1+1)/1+1 = 3 → i=3, j=1
// 陷入死循環:i 在 2~9 循環,j 永不變化,條件 j<10 永真

總結

**`++j` 有副作用 (修改變量),`j+1` 無副作用。** 此循環依賴 `++j` 的副作用驅動 `j` 從 1 遞增至 9,配合 `i` 重置實現九九乘法表行列控制。替換為 `j+1` 會導致邏輯完全失效。

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