雙層循環:外層控制行 i,內層控制列 j。三種模式僅內層循環範圍不同。
public class JiuJiu {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.print(i + "*" + j + "=" + (i*j) + "\t");
}
System.out.println();
}
}
}
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) { // j 只到 i
System.out.print(i + "*" + j + "=" + (i*j) + "\t");
}
System.out.println();
}
輸出:1*1=1 / 2*1=2 2*2=4 / 3*1=3 3*2=6 3*3=9 ...
for (int i = 1; i <= 9; i++) {
for (int j = i; j <= 9; j++) { // j 從 i 開始
System.out.print(i + "*" + j + "=" + (i*j) + "\t");
}
System.out.println();
}
StringBuilder 累積行內容,行末一次 println,減少 I/O 調用System.out.printf("%d*%d=%-3d ", i, j, i*j) 對齊更美觀printTable(9, (i,j) -> j <= i) (Java 8+ 函數式)import java.util.stream.IntStream;
public class JiuJiuModern {
public static void main(String[] args) {
// 完整表
IntStream.rangeClosed(1, 9).forEach(i ->
IntStream.rangeClosed(1, 9)
.mapToObj(j -> String.format("%d*%d=%-3d", i, j, i*j))
.forEach(System.out::print)
); // 需手動換行,Stream 不適合行式輸出
// 推薦:傳統循環 + StringBuilder
for (int i = 1; i <= 9; i++) {
StringBuilder sb = new StringBuilder();
for (int j = 1; j <= 9; j++) {
sb.append(String.format("%d*%d=%-3d ", i, j, i*j));
}
System.out.println(sb);
}
}
}
九九乘法表是循環嵌套、條件控制、格式化輸出的綜合練習。三種模式體現「同一邏輯,不同邊界」的編程思想。實際開發中,可讀性優於花哨語法,傳統雙層 for 循環配合 StringBuilder 往往是最佳平衡。