初考-統計 112 年 · 第 16 題 初考-統計 資料處理大意 112 年 第 16 題 單選題
下列 Java 程式執行後的輸出為何?
public class Test
{
public static void main (String[] args)
{
int a= 0;
int b= 0;
for (int c = 0; c < 4; c++)
{
if (( ++a > 2 ))
{
a++;
}
}
System.out.println (a);
}
} C 正確答案
逐圈追蹤 ++a 與 if 內 a++ 的累加,共 4 圈後 a=6。
為什麼答案是 C c=0: ++a→1,不>2; c=1: ++a→2,不>2; c=2: ++a→3,>2 再 a++→4; c=3: ++a→5,>2 再 a++→6。最終 a=6。
載入中…
完整詳解 Pro · 無限 重點 逐圈追蹤 ++a 與 if 內 a++ 的累加,共 4 圈後 a=6。
前2圈只+1(=1,2),後2圈 ++a 後超過2再+1(+2),2+2+2=6。
逐選項分析 A ✕ 陷阱
只算 ++a 執行 4 次 = 4,忽略 if 內部的 a++,錯誤。
B ✕
5 是誤以為 if 只成立一次,實際後兩圈 (c=2,3) 都成立。
C ✓ 正確
c=0: ++a→1,不>2; c=1: ++a→2,不>2; c=2: ++a→3,>2 再 a++→4; c=3: ++a→5,>2 再 a++→6。最終 a=6。
D ✕
7 是誤以為四圈都觸發 if (4+3=7),但前兩圈 a 尚未>2。
逐圈追蹤表 c ++a後 a>2? if內a++ 圈末a 0 1 否 - 1 1 2 否 - 2 2 3 是 +1→4 4 3 5 是 +1→6 6
此題陷阱在於 ++a 是前置遞增,比較時 a 已是新值;且 if 條件成立時會再 a++ 一次。考生容易只數迴圈次數 (4) 或誤算觸發次數,忽略前兩圈 a 還沒達到 >2 的門檻。