for (int a = 1 ; a <= 9; a++){
System.out.println(1 + "*" + a + "=" + a*1);
}
在第一個循環當中,a以a=1的身份參與進了運算,即此時輸出的結果是1*1=1,完成第一次循環后a會先加1(a++)再判定,判斷符合條件后再次進入循環體,輸出結果是1 * 2 = 2;一直循環至a=9,輸出的結果是1 * 9 = 9
此處也可以理解為:先將九九乘法表的第一列輸出出來。
-
此時的1*a中,因為a會從1循環到9,所以才會生成以上乘法表的第一列,1是定死的。那么,如果1本身也成為了一個可以循環的變量,在1計算完從1 * 1到 1 * 9 的計算之后,前者循環至2 ,然后在進行從2 * 2到2 * 9 的循環計算,以此類推,直到9 * 9,這是否可行呢?
我們再定義一個for循環,初始值同樣為1;乘法表最大數值為9,所以判定條件b同樣小於等於9;每完成一個循環b會加1;
for (int b = 1 ; b<=9 ; b++) {
for (int a = 1; a <= 9; a++) {
System.out.println(b + "*" + a + "=" + b * a);
}
}
將”b循環“嵌套在“a循環”上,同時,將本來a循環內的 1 * a 中的 “1” 替換成 “b”。
修改之后的循環是,b以等於1的身份參與到 a循環里,然后開始了類似上一步的循環:開始輸出 1 * 1 = 1 ; 1 * 2 = 2...... 1 * 9 = 9;當本輪a循環結束后, b的值會加1(b++);也就是2;經過判定條件 b<= 9的“確認”后,再次進入a循環開始輸出2 * 1 = 2; 2*2 = 4 ; ...... 2 * 9 = 18 ;本輪a循環結束后, b的值會再次加1;也就是3;以此類推,直至循環至 9 * 9 = 81,b循環與a循環均循環結束。
但很明顯, 輸出的乘法出現了重復,在乘法表中,第二個乘數始終不大於第一個乘數,也就是在代碼里,a應該小於等於 b。
所以,我們將a循環 的判定條件修改為 a <= b
修改前:
修改后:
for (int b = 1 ; b<=9 ; b++) {
for (int a = 1; a <= b; a++) {
System.out.println(b + "*" + a + "=" + b * a);
}
}
此時的循環是,b以等於1的身份參與到 a循環里,輸出 1 * 1 = 1 ;但因為a<=b,a+1的結果無法通過判定條件,所以本輪a循環結束;當本輪a循環結束后, b的值會加1(b++);也就是2;經過判定條件 b<= 9的“確認”后,再次進入a循環開始輸出2 * 1 = 2; 2*2 = 4 ,而后本輪a循環再次結束;b再次加一等於3,而后3 * 1 =3...... ;以此類推,直至循環至 9 * 9 = 81,b循環與a循環均循環結束。
-
至此,九九乘法表的所有計算已經全部輸出,只剩下最后的修飾了。
先將輸出語句的println中的ln去掉,改為橫向輸出
for (int b = 1 ; b<=9 ; b++) {
for (int a = 1; a <= b; a++) {
System.out.print(b + "*" + a + "=" + b * a);
}
}
再在循環體內后加一個空格的轉義字符,使每個乘法間加以區分
for (int b = 1 ; b<=9 ; b++) {
for (int a = 1; a <= b; a++) {
System.out.print(b + "*" + a + "=" + b * a + "\t");
}
}
再使每結束一次a循環就換一次行,換行的方法可以是在b循環語句內a循環語句后加上一個空的println輸出語句
for (int b = 1 ; b<=9 ; b++) {
for (int a = 1; a <= b; a++) {
System.out.print(b + "*" + a + "=" + b * a + "\t");
}
System.out.println();
}
至此,九九乘法表輸出完畢.當然,如果看的不順眼可以將a 和 b 的位置調換一下
for (int b = 1 ; b<=9 ; b++) {
for (int a = 1; a <= b; a++) {
System.out.print(a + "*" + b + "=" + b * a + "\t");
}
System.out.println();
}
