經典入門練習,考察循環控制、條件判斷、格式化輸出三大基礎語法。本文提供標準實現並解析關鍵技術點。
/**
* 輸出 1 到 100 中的偶數,每行顯示 5 個
* @author 趙學慶 www.java2000.net
*/
public class EvenNumberPrinter {
public static void main(String[] args) {
int count = 0; // 行內計數器
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) { // 1. 判斷偶數
System.out.printf("%3d", i); // 2. 格式化輸出,佔 3 字符寬度右對齊
count++;
if (count % 5 == 0) { // 3. 每 5 個換行
System.out.println();
}
}
}
}
}
i % 2 == 0% 返回除法餘數(i & 1) == 0(性能微優,現代 JIT 已優化無差異)printf("%3d", i)%3d:十進制整數,最小寬度 3,右對齊,不足左補空格 2、 10、100 對齊整齊print:無需手動拼接空格,語義更清晰count % 5 == 0count,而非直接用 i % 10 == 0i 步長為 1,偶數間隔 2,i % 10 會在 10、30、50... 換行(第 5、15、25... 個偶數),邏輯易誤count 專門計數已輸出偶數個數,語義精確 2 4 6 8 10
12 14 16 18 20
22 24 26 28 30
32 34 36 38 40
42 44 46 48 50
52 54 56 58 60
62 64 66 68 70
72 74 76 78 80
82 84 86 88 90
92 94 96 98100
import java.util.stream.IntStream;
public class EvenNumberPrinterStream {
public static void main(String[] args) {
IntStream.rangeClosed(1, 100)
.filter(i -> i % 2 == 0)
.forEach(i -> {
System.out.printf("%3d", i);
if (i % 10 == 0) System.out.println(); // 此處 i 為偶數,i%10==0 等價於第 5 個
});
}
}
注意:Stream 版本中 i % 10 == 0 成立,因為流已過濾出偶數,i 序列為 2,4,6,8,10... 第 5 個恰好是 10 的倍數。
| 錯誤代碼 | 問題 | 修正 |
|---|---|---|
if (i % 5 == 0) 直接換行 | i 為 5、15、25... 非偶數,或 10、20... 但漏掉 2,4,6,8 | 引入獨立計數器 |
System.out.print(i + " ") | 數字寬度不一,列不對齊 | 使用 printf("%3d") 或 String.format |
循環 i += 2 但起始 i=0 | 輸出 0,2,4... 不符合「1 到 100」題意 | 起始 i=2 或保持 i=1 配合 if |
這道題雖簡單,卻完整覆蓋了循環遍歷、條件篩選、格式化輸出、狀態計數四大基礎編程技能。建議初學者手寫 3 遍:C 風格 for、while 版、Stream 版,體會不同抽象層級的表達力差異。